陣列變數與指標

2022-04-26 07:30:06 字數 1720 閱讀 1999

背景:完全的c初學者。。試圖搞清楚陣列的概念,做了一些小試驗,查了一些解釋,合成此文。

我們說陣列變數相當於常量指標,那麼實際它就是常量指標名嗎?

簡單試驗:

1

#include 23

int main() ; //宣告陣列變數

22 printf("

",&s);

23 printf("

",&s+1);

24 printf("

陣列變的位址佔位:%d\n

",sizeof(&s)); //sizeof(位址)

25 printf("

陣列變數的值:%p\n

",s); //陣列變數的值的自己的位址!是乙個特殊的指標!

26 printf("

陣列變數的值+1:%p\n

",s+1);

27 printf("

陣列變佔位:%d\n

",sizeof(s)); //sizeof(位址)?

2829

30 printf("

",&s[0]); //s和s[0]位址相同!

31 printf("

",&s[1]); //陣列是變數的容器

32 printf("

取陣列首元素:%d\n

",s[0]);

33 printf("

對陣列變數解指標操作:%d\n

",*s); //s指向的東西就是s[0]!

34 printf("

陣列元素佔位:%d\n\n

",sizeof(s[0]));

3536

3738 //指標變數和陣列變數互相s賦值

39 int b=88;

40 int *const p2=&b; //常量指標必須在宣告的時候初始化!

41 p = s; //可以改變指標p的值

42 // p2 = p; //常量指標不可修改!

43 // s = &b; //陣列變數不可修改!

44 int s2[5];

45 printf("

",&s);

46 printf("

陣列變數的值:%p\n

",s); //位址相同??

47 // s2 = s; //陣列變數不可修改!

4849

return

0;50 }

view code

輸出:

可以看出來:

其中不解的是

於是,查閱了一下,這個問題大致是這樣理解的

另有乙份總結:

陣列名的盲點:

下列場合中陣列名不能看做常量指標:

驗證s與&s類別不同

s與&s值相同,但s+1與&s+1值不同

陣列名與指標變數

今天偶然間看到乙個問題,於是乎去學習了下,記錄一下對陣列名的乙個知識點。陣列名 是指標常量。出錯 int aa 10 int num 0 for num 0 num 10 num int bb int malloc 40 memset void bb,0,40 for num 0 num 10 nu...

指標與指標變數

1 i pointer是乙個指標變數,而 i pointer表示i pointer所指向的變數即i。下面兩個語句作用相同 i 3 i pointer 3 2 定義指標變數 基型別 指標變數名 下面都是合法的定義 float pointer 3 pointer 3是指向單精度型資料的指標變數 char...

指標與陣列,指標陣列 陣列指標

int a 10 print n a p,a p a,a print n a 1 p,a 1 p a 1,a 1 a做乙個指標,步長為4,指向乙個元素,a做乙個指標,步長為40,指向乙個維陣列 int b 3 4 print n b p,b p,b p b,b,b print n b 1 p,b 1...