1.What is true after the following statement in a C program have been
excuted??
int* intPointer;
intPointer = (int*) 500
*intPointer = 10
2007-06-30 11:11:16 · 3 個解答 · 發問者 阿傑 1 in 電腦與網際網路 ➔ 程式設計
其實這題很難說是哪裡錯, 我實際試了一下
int* intPointer;
intPointer = (int *)500;
*intPointer = 10;
這個會當機, 因為第二行讓指標指向500那個位置, 我們根本不知道那裡是什麼程式所在, 然後塞10進去, 所以造成當機, 要說是第三行的錯誤嗎? 這個塞值的動作本身是OK的, 要說第二行錯嗎? 這個指定位置的動作也沒錯, 錯在不該指定到一個莫名其妙的地方去
怎麼証明第三行沒錯呢?
int* intPointer;
intPointer = new int;
*intPointer = 10;
printf("int=%d\n", *intPointer);
只要讓intPointer指到一個我們自己new出來的位置, 然後塞值給他, 這次可以發現程式不會當掉而且能正確顯示10, 所以程式是沒錯的
這個問題變得有點詭異; 指標指向500其實也沒什麼問題, 只要不塞值就好了; 塞值也沒什麼大不了的, 只是不能在指向500的時候塞值. 所以唯一沒有問題的敘述是宣告指標的敘述???? 太奇怪的問題了
2007-06-30 17:19:09 · answer #1 · answered by Walala 5 · 0⤊ 0⤋
有錯沒錯還要看使用的平台.
如一些沒OS的平台.RAM 的使用完全由程式設計師控制下. 這個程式一點錯誤也沒有.
2007-06-30 17:34:42 · answer #2 · answered by SiYu 5 · 0⤊ 0⤋
*intPointer = 10;
我想只有這行程式是錯誤的。
必須寫成 intPointer = &10;
2007-06-30 13:48:50 · answer #3 · answered by Big_John-tw 7 · 0⤊ 0⤋