看板 C_and_CPP 關於我們 聯絡資訊
/ ==================================== int main() { char *a[4]={"一一","二二","三三","四四"}; char *ptr; for(int i=0;i<4;i++) { printf("a[%d]=",i); ptr=a[i]; for(int j=0;*(ptr+j)!='\0';j++) printf("%c",*(ptr+j)); printf("\n"); } cout<<a[4];-----------------> system("pause"); return 0; } 小弟在練習用指標顯示字串,但是發現cout<<a[4];他會顯示"四四"這個字串 a這個字元指標陣列他的索引值,最大應該是a[3] 為什麼我給他a[4]他仍會顯示"四四"這個字串 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 36.235.185.244
azureblaze:因為記憶體排列順序的關係a[4]會跟ptr一樣 04/26 21:41
azureblaze:不過實際上應該是「發生任何事都不意外」 04/26 21:42
CCWck:建議你把記憶體位置print出來 觀察看看 04/26 21:44
diabloevagto:第二戒 04/26 21:56
pujols05:cout<<&ptr<<endl;cout<<&a[3]<<endl;cout<<&a[4]<<endl; 04/26 22:15
pujols05:剛看了發現ptr沒有指向a[3]或a[4] 為什麼? 04/26 22:16
pujols05:0x28fef4,0x28ff04,0x28ff08 分別是指向這3個位置 04/26 22:18
diabloevagto:你本來就不該讀取超出範圍的陣列 04/27 01:36
pujols05:謝謝樓上 只是覺得a[4]超出範圍 應該顯示的是亂碼之類的 04/27 15:46
pujols05:不了解為啥顯示的是最後一筆的資料 04/27 15:47
bibo9901:未定義行為, 想知道的話只能去看組語了 04/27 17:53
bibo9901:不過看起來是, a[4] 剛好存取到 ptr 04/27 17:55