C語言指標的問題

2022-12-15 06:06:36 字數 1304 閱讀 4098

1樓:匿名使用者

樓主一定搞錯了吧,你寫的這個程式上機執行的結果並不想你所說的答案;

程式應該修改:

int a=10,b=20; 替換為:int a[2]=;

int *p=&a; 替換為:int *p=a;

其他不變,這樣就符合答案了.

下邊解釋原因:

用一位陣列儲存變數,系統給陣列分配連續的記憶體空間,陣列名a就是陣列的首地址,p首先指向陣列的首地址,即指向了a[0]的地址,p++後,指標後移指向第二個陣列元素即a[1]; 懂了嗎?

2樓:

這是巧合

是碰巧電腦把a和b儲存在相鄰的兩個地址裡,所以p++後就向後移動了個地址就指向b了

是沒有關係的,但是他們總得存在記憶體裡啊,他們雖然沒有直接的關係,但在這裡,它們在記憶體裡所「居住」的地址相鄰,就是鄰居,而p又是指標,是指向地址的,p++了,說明p就指向a的「下一戶人家」了,那麼就正好是指向b了

3樓:特莉艾拉

我覺得大概是這樣的。。。

你定義兩個整形變數a,b然後是一個指向整形的指標p,這時候a和b就相當於在記憶體的100號和102號,第一個輸出的p肯定是指向100號p的內容,也就是a的10,然後,p++,也就變成指向102號了。。然後這裡面正好是你輸入的b的地址,所以,下面就指向20了。。。

呼呼。。。我也是新手。。。有問題大家一起討論哈~

4樓:厙昕葳

記憶體為變數分配記憶體地址巧合引起的,使得a,b變數的地址挨著了,自然指標加一就指向b變數的地址,不過這樣用是很危險的,不能隨便就把指標加一或減一,會引起記憶體出錯的,除非是在陣列中,因為那裡陣列中各元素之間地址就是自增一的。

5樓:

這個跟你變數定義順序有關,int a=10,b=20;在記憶體中的地址是連續的,p++後正好指向b,而且b的型別也是int,所以才沒出錯。

6樓:

int a=10,b=20; 記憶體地址連續。 所以 輸出20;

不過也不是一定的。

和你用的編譯器有關。

在c++中就不是連續地址了。。

你換c++編譯器試試。

7樓:匿名使用者

這指向的是某個記憶體單元的隨機值,可用%p來檢視指標指向的記憶體地址

#include

main()

8樓:

這裡第二次輸出是20,是因為分配記憶體地址的時候,p++ 指向了變數b。

p++;這種操作在實際應用中是絕對不允許。

c語言的指標問題,C語言的指標問題

printf c p 3 分佈來看,c是要列印輸出一個字元。p指向那個字元陣列,p就是字元 a 那麼 a 3是多少呢,a 1是b 2 是c 3 是d注意是 p 3 而不是 p 3 這是由區別的。是的。p 3。是對p指向的那個值加3,p開始是指向a的,故a加3後就是d了 而p 執行3次的話,是指標p本...

c語言指標的賦值問題C語言指標的賦值問題

指標在用要注意初始化,例如 int p p為指標,地址是未知的,如果直接賦值 p a 這樣編譯可以通過,但是會產生警告,p的地址是隨機分配的,這樣對未知的地址賦值很危險,可能會覆蓋掉某些重要資料,所以避免這種危險,在定義指標時注意初始化,也就是賦值。可以int p a 或者int p p a 然後再...

C語言指標問題,求教大神C語言指標的問題搞不懂求大神指教

include include include include include static char chongpai char static int pare const void const void static int allocateintegerarr const char size ...