陣列是一段連續的記憶體空間
陣列的空間大小為sizeof(arrary_type)*arrary_size
陣列名可看做指向陣列第乙個元素的常量指標
a+1的意義是什麼?結果是什麼?
指標運算的意義是什麼?結果又是什麼?
1 #include 2intmain()3;
5int*p =null;
6 printf("
a = 0x%x\n
",(unsigned int
)(a));
7 printf("
a+1 = 0x%x\n
", (unsigned int)(a + 1
));8 printf("
p = 0x%x\n
", (unsigned int
)(p));
9 printf("
p+1 = 0x%x\n
", (unsigned int)(p + 1
));10
return0;
11}12執行結果:
13 a = 0x55fdf8
14 a+1 = 0x55fdfc
15 p = 0x0
16 p+1 = 0x4
17 請按任意鍵繼續. . .
指標是一種特殊的變數,與整數的運算規則為:p+n <==> (unsigned int)p +n*sizeof(*p);
指標之間支援減法運算
參與減法運算的指標型別必須相同
注意:只有當指標指向同乙個陣列中的元素時,指標相減才有意義,其意義為指標所指元素的下標差。
當兩個指標指向的元素不在同乙個陣列中時,結果未定義。
p1 - p2 《=》((unsigned int p1) - (unsigned int p2))/sizeof(type)
指標也可以進行關係運算(< ,<=,>,>=)
指標關係運算的前提是指向同乙個陣列中的元素
任意兩個指標之間的比較運算(==
!=)無限制
參與比較運算的指標型別必須相同
#include #define dim(a) (sizeof(a)/sizeof(*a))intmain()
;
char*pbegin =s;
//如果有乙個指標指向了陣列最後乙個元素的後乙個位址,那麼這個
//位址是c語言中的乙個擦邊球位址
char*pend = s+dim(s);
char*p =null;
printf(
"pbegin=%p\n
",pbegin);
printf(
"pend=%p\n
",pend);
printf(
"陣列元素個數=%ld\n
",dim(s));
for(p=pbegin;p)
printf("\n
");return0;
}執行結果:
[email protected]:~$ gcc main.c
[email protected]:~$ ./a.out
pbegin=0x7ffe6de0f620
pend=0x7ffe6de0f625
陣列元素個數=5
hello
陣列宣告時編譯器自動分配一片連續的記憶體空間
指標宣告時只分配了用於容納位址值的4位元組空間
指標和整數可以進行運算,其結果為指標
指標之間只支援減法運算,其結果為陣列元素下標差
指標之間支援比較運算,其型別必須相同
26 指標和陣列分析(上)
1 陣列的本質 提出問題 假設a是乙個陣列,a 1 假設a是乙個指標,a 1 指標運算的意義是什麼?結果又是什麼?指標 n 的本質就是指標所指向的位址 指向資料的型別佔的記憶體大小 n include int main int p null printf a 0x x n unsigned int ...
C語言中指標和陣列分析 上
事物的難度遠遠低於對事物的恐懼!這章我們來分析下指標和陣列,在前兩章我們談了陣列和指標,我們知道 陣列的本質 陣列是一段連續的記憶體空間 陣列的空間大小為sizeof array type array size 陣列名可看做指向陣列第乙個元素的常量指標 那麼我們來看乙個問題 對於乙個陣列 int a...
29 指標和陣列分析(下)
注 部落格中內容主要來自 狄泰軟體學院 部落格僅當私人筆記使用。測試環境 ubuntu 10.10 gcc版本 4.4.5 一 問題 陣列名可以當做指標常量使用,那麼指標是否也可以當做陣列名來使用呢?二 陣列的訪問方式 1 以下標的形式訪問陣列中的元素 int main a 1 3 a 2 5 re...