C語言指標和陣列的問題,急

時間 2021-07-21 03:41:38

1樓:斌and麗

你的程式本來就寫的有錯誤吧!你真的可以執行嗎?用的什麼工具啊?

int main(void)

;int * p1,*p2,*p3;

p2=&a;//這種賦值是錯誤的吧

p1=a;

p3=&a[4];

getch();//這裡應該改為getchar();

return 0;}

2樓:匿名使用者

&a 、 a、 &a[0]都是一個值,指向首地址。

&p1是取指標p1的地址,不是p1內容的地址。p1 p2相等,但是&p1 不等於p2。

p3 與 陣列a沒關係,但是因為a[4]正好索引到陣列a最後一個成員的下一個地址,因此正好是p1的地址。這段解釋比較麻煩,畫個圖會明白些。

簡單的說,區域性動態變數的空間是在棧內分配,而不是一個全域性性的不變的量。進入函式以後,按順序,從棧的空間中,給函式中定義的各變數分配空間。在你的函式中,最前面4個int型分配給陣列a,接下來分配給三個指標p1/p2/p3。

因為陣列a是int型,每個成員佔用4個位元組。而指標佔用也是32位,正好與int型相同。注意,32位系統中,指標都是32位長。

因此p1 p2 p3的地址,相當於陣列a順序往下數第5、6、7個成員。也就是說

&a[4] == &p1

&a[5] == &p2

&a[6] == &p3

3樓:吳鐵騎

好像沒有%p這種吧?應該是你寫指標的時候寫多了,**看錯了吧

p2=&a就是讓p指向a的地址而不是a的內容,由於p1也佔一個記憶體,&p1代表的是p1的地址而不是a的首地址

4樓:淦海瑤

p3=&a[4];

這句話不對,越界了

5樓:

a、&a[0]、&a都是陣列的首元素地址

&p1指指標變數p1的地址;p2是指標變數。從程式上看p2的值是和p1相等的,都是陣列的首元素地址,明顯和p1的地址不等。

p3的值是陣列a後面的一個地址,從執行的結果看 p1變數存放的位置就在陣列a後面。

C語言中關於指標和陣列命名處的問題

空雪夢見 前者出錯的原因就和 int a 10 a 1 是一個道理。一個是可以往裡面存指標的陣列,一個是指向陣列的一個指標。後者,char month 是宣告 指向陣列的一個指標 的語法這種語法必須指定陣列的大小才能宣告。char month 是宣告 一個可以存指標的陣列 的語法,後面就適用 初始化...

c語言問題,陣列與指標,C語言陣列和指標的問題

char a computer a指向一個常量字串,常量字串是不能修改的,而你的for迴圈內要修改a指向的這個常量字串,自然要出錯 char a computer 這個a就是個普通陣列了,它的內容是可以改動的,就不會出錯了 因為 a是個指標啊 所以應該賦值賦地址!所以 應該 char a compu...

C語言陣列(指標)越界訪問,C語言指標越界問題,大神指教!!!

與編譯器無關,只與記憶體管理機制有關,是作業系統級別的問題,堆疊的讀取方式只是資料結構上的不同,在機器層面,依然是單純的記憶體讀寫操作 陣列越界訪問的危險性不好評估,但確實是最嚴重的危險之一 結果基本上會100 崩潰,但是崩潰的原因很可能不一樣,就算是同一段越界 跑幾遍,原因也可能是不一樣的 指標越...