指標和陣列分析(上)

2022-08-30 13:57:11 字數 1837 閱讀 7248

陣列是一段連續的記憶體空間

陣列的空間大小為sizeof(arrary_type)*arrary_size

陣列名可看做指向陣列第乙個元素的常量指標

a+1的意義是什麼?結果是什麼?

指標運算的意義是什麼?結果又是什麼?

1 #include 2

intmain()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...