課程
/后端開發
/C
/Linux C語言指針與內存
這就是代碼
2016-03-26
源自:Linux C語言指針與內存 5-2
正在回答
我按樓主程序運行,在Linux下同樣出現相同的情況,執行到循環時,gdb也不能打出值來。換了c-free ,第三個輸出就出現莫名的值,我認為這是編譯器的問題。
*p = 2
*p = 1
*p = 5
*p = 1417759240
*p = 32767
*p = 10
*p = 100
*p = 0
-----------------
p[0]=2
p[1]=1
p[2]=5
p[3]=1417759228
p[4]=32767
p[5]=1
p[6]=10
p[7]=100
p[8]=0
刪掉p[3]=101這條語句后的運行結果如上,由結果可知,p[3]、p[4]都指向了系統分配的存儲其他數據的內存空間,是不可操作的,p[5]指向了array[0],可以改變其中的值。所以會出現崩潰的現象。至于系統為什么這么分,我猜測是編譯優化的結果,如果還有別的解釋,歡迎交流。
舉報
指針-C語言的核心,代領大家對c語言有更加深刻的理解
3 回答我想了解的是為什么指針指向常量的地址,輸出值時,地址是常量的地址,結果卻不一樣,我知道常量不能修改,但是為什么會有這種情況?
3 回答不是很分得清什么樣的情況存儲在代碼段內存,什么樣的在棧內存?請大神講解。
1 回答求問,為什么調試時print出來的值是這個?????
1 回答為啥地址中是a i b這種格式啊。
1 回答這什么?這什么?
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2016-09-25
我按樓主程序運行,在Linux下同樣出現相同的情況,執行到循環時,gdb也不能打出值來。換了c-free ,第三個輸出就出現莫名的值,我認為這是編譯器的問題。
2016-04-06
*p = 2
*p = 1
*p = 5
*p = 1417759240
*p = 32767
*p = 1
*p = 10
*p = 100
*p = 0
-----------------
p[0]=2
p[1]=1
p[2]=5
p[3]=1417759228
p[4]=32767
p[5]=1
p[6]=10
p[7]=100
p[8]=0
刪掉p[3]=101這條語句后的運行結果如上,由結果可知,p[3]、p[4]都指向了系統分配的存儲其他數據的內存空間,是不可操作的,p[5]指向了array[0],可以改變其中的值。所以會出現崩潰的現象。至于系統為什么這么分,我猜測是編譯優化的結果,如果還有別的解釋,歡迎交流。