背景:完全的c初學者。。試圖搞清楚陣列的概念,做了一些小試驗,查了一些解釋,合成此文。
我們說陣列變數相當於常量指標,那麼實際它就是常量指標名嗎?
簡單試驗:
1view code#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 }
輸出:
可以看出來:
其中不解的是
於是,查閱了一下,這個問題大致是這樣理解的
另有乙份總結:
陣列名的盲點:
下列場合中陣列名不能看做常量指標:
驗證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...