C語言 一維陣列與指標 30

時間 2025-03-18 06:25:18

c語言,指向一維陣列的指標變數

1樓:

p=&a;才是=號兩邊型別匹配。因為p被宣告為指向有4個元素的一維整型陣列的指標,而a被定義為乙個整型陣列的第乙個元素的指標,所以寫成p=a;等號兩邊型別不匹配,連編譯都過不了。而&a就是乙個有4個整型元素的一維陣列的指標——就是說在int a[4]=;的定義後,a是1的位址,a+1就2的位址;而&a的值雖與a相同,但&a是整個陣列的位址,&a+1就指向7後面的那個單元了。

而int (*p)[4];這種宣告恰好就是&a的意思,即p是個指標,指向乙個4元素整型陣列,也就是p+1就要跳過4個int元素所佔有的空間。

printf("%d",(*p)[3]);中的(*p)[3]的意思是這樣的:有了p=&a;後,p的位址「值」就是1的位址「值」,但意思是緊挨著存放的1,3,5,7這4個int數的首位址,*p後就是第乙個元素1的位址了,那麼(*p)[3]就向後移動3個元素位置,應該是7了……這裡把*p用()括起來是因為的優先順序比*高,不括起來就被解釋成*(p[3])了,意思就大錯了!

這裡涉及的指標操作表述起來有些「繞」,得慢慢體會……

2樓:徐_小楊

這裡寫p=a 是可以的。 因為陣列的定義int a[4],a 就是 代表陣列所在的記憶體位址,所以p=a其實和p=&a 是等價的,你把它換成p=a 試試 結果還是輸出了7.

謝謝採納~

c++ 陣列與指標

3樓:網友

int a[10];

這裡限定長度為10個整數,所以長度為10*sizeof(int) =40。

int *b=a;

由於b是指標,無論是否指向a,指向什麼,sizeof(b)等於sizeof(int),32位平臺上等於4。

以上討論的問題引發的關於陣列名稱的問題:

陣列名本身是個位址常量,但是某些特殊情況下它的語義可以發生改變。例如sizeof(a),這時a表示整個陣列物件(這裡指語法物件,不是指類的例項)而不是這個常量本身。基於這個語義,對陣列名取位址也是合法的,對於陣列a來說&a的結果等於a這個位址常量本身的值。

這是c/c++標準委員會為了維護語法物件a作為乙個左值(l-value)總可以取位址這條原則的妥協。

4樓:軍軍

陣列名是陣列首位址,本身不是變數。

5樓:丨嗚呼哀哉

陣列和指標的概念不一樣。

定義乙個陣列,記憶體就會給他分配指定的空間;

定義乙個指標,記憶體只會分配乙個存放該指標的空間,也就是說指標沒有大小,有的只是存放自己的位置,該位置大小和型別有關:int char等等。

你的例子中也說明了這一點,sizeof(a)肯定就是陣列的大小,因為它「申請」了10個,那記憶體就分給它10個;指標只是定義而已,沒有要求大小,記憶體也不知道該給它分配多少,所以就沒分配。指標指向的卻是乙個位址,也就是a的位址,當呼叫該指標時,其實就相當於呼叫該指標指向的位址……

sizeof(b)所以只是int的大小。

求助 C語言二維陣列指標問題,c語言二維陣列用指標表示的問題

1.對於int p a p型別和a是不同的。p是指向乙個指標 指向int型別的量 的指標,a則是指向乙個一維陣列 含2個int元素 的指標。想要建立相同型別的指標應該用int p 2 才行 3.感覺p跟a就同級吧但型別不同 所以其實int p a 兩側的指標的型別是不相同的,只是a的值賦給p而已 假...

關於C語言二維陣列指標問題

如果是前者的話,每行應該輸出乙個元素才對,如果是後者的話又應該只能輸出每一行的首元素才對呀?正如樓上2位仁兄所言,p 指的是前者 下乙個元素的位址 樓主的疑問似乎是認為,該程式段 每行應該輸出乙個元素才對 這是不對的,語句printf 3d p 是每輪迴圈都要執行的,即按每個數字佔3個int大小列印...

C語言菜鳥請教個2維陣列指標的問題

a 1 就是 a 1 一模一樣。就是取位址運算子,解析之後就是 的形式。a 1 就是 a 1 0 所以 a 1 就是 a 1 0 也就是位址你不要老想著什麼取位址取值,只要按照 的運算規律和陣列的基本概念去理解就好了 對於乙個二維陣列,a表示a 0 的首位址即 a 0 而a 0 把a 0 看作乙個一...