1樓:匿名使用者
結構體中的各個成員在儲存時是相鄰的,所以變數i和p是相鄰的。
int * p = &s.i;
p[0] = 4;
p[1] = 3;
p指向s.i之後,p[0]就是s.i,而p[1]就是s.p,因此,這三行過後,s.p指向位址3(這是乙個非法位址)
s.p = p;
s.p[1] = 1;
s.p[0] = 2;
這裡先讓s.p指向p所指向的位址,也就是指向s.i,之後的s.
p[1]=1,就是將1儲存到與s.p[0]相鄰的位址,因為s.p[0]指向s.
i,所以s.p[1]就是s.p指標成員。
即s.p[1]=1使s.p重新指向了位址1(非法位址指向),後面的s.
p[0]=2相當於*(s.p)=2,就是要把2儲存到s.p指向的位址,由於現在s.
p指向位址1,不能直接對這個位址操作,所以程式崩潰。
2樓:陽光上的橋
答案可能有錯,你執行一下,不得死的。
一道C語言問題,一道c語言問題
看程式先看main函式 int a,b,c 定義了3個整型變數 然後分別呼叫了3次sub函式 再看sub函式 sub int x,int y,int z 因為c語言的函式呼叫過程中是在棧上開闢的記憶體空間,所以試圖對引數本身做的操作在函式被呼叫結束之後將無意義。所以該函式要對z變數進行操作所以要取其...
一道C語言問題
c語言是從右向左解釋算式的。其實,像y x x 這類的計算語句在實際應用中是很少用到的。因為這樣算式的結果依賴於編譯程式的解釋。而不同廠家出品的編譯程式往往在細節上面是不一致的。所以對這類語句不建議初學者過多研究。你要搞清楚自加在左邊和在右邊的區別。在你給的式子當中,有個 x,所以在計算的時候,先計...
一道c語言ACM錄入問題,acm的一道c語言問題
acm這些題目不需要先儲存輸入,最後再一次性輸出。直接邊處理,邊輸出就行了。然後像這種型別的輸入,如下。while scanf d n n 0 小於100,你在a i 90 處放行的個數真的好嗎。acm的一道c語言問題 這題的意思是讓你從幾幅圖中提取背景。其實就是很多畫素點,要提取這攝像頭中的背景,...