我正在學校上 C 課程,并給出了幾行有錯誤的代碼,但我無法找到所有 4 個錯誤。代碼應該列印數字“302”我不擅長指標。這是代碼
int main () {
int* ptr;
int* temp;
int x;
ptr = int;
*ptr = 3;
cout << ptr << endl;
x=0;
temp = x;
cout<<*temp<< endl;
ptr = int;
*ptr = 2;
cout<<*ptr-*temp <<endl;
return 0;
}
到目前為止我發現的兩個錯誤是
- cout 和 endl 需要在它們前面有 ::std
- temp = x 需要是一個指標,*temp = x
uj5u.com熱心網友回復:
包括<iostream>整理cout,endl錯誤。通常 C 編譯器需要知道這些函式來自哪里。
#include <iostream>
使用std::coutandstd::endl而不是只是coutand endl。
new運營商錯過了ptr和temp指標
ptr = new int;
temp = new int;
請注意,當您為ptrand動態分配記憶體時temp,請確保在使用后通過delete ptr, 將delete temp其洗掉。
uj5u.com熱心網友回復:
其他答案已經指出了問題,他們的解釋和可能的解決方案,除了這個問題:
- temp = x 需要是一個指標,*temp = x
不,你在這里錯了。指標temp未初始化,取消參考未初始化的指標 ( *temp) 將導致未定義行為。你可以通過兩種方式解決它:
首先,分配記憶體給temp
temp = new int;
然后你可以這樣做
*temp = x;
在這種情況下,分配給的記憶體temp將具有值的獨立副本x。對值的任何更改x都不會反映在temp指標指向的記憶體內容中,反之亦然。確保釋放分配給 的存盤temp,一旦完成它,因為它指向的記憶體是動態分配的。
二、分配xtotemp指標的地址
temp = &x;
temp指標指向x。對x和的值進行任何更改*temp都會給出 的當前值,x反之亦然。不需要釋放,temp因為它指向的記憶體不是動態分配的。
uj5u.com熱心網友回復:
對于較少的代碼行,我更喜歡全域使用命名空間 std,這將解決每次使用 std::cout 的問題
using namespace std;
除此之外,您必須在宣告指標后為指標分配記憶體,這可以通過使用 new 運算子來完成(不要忘記在使用 delete 運算子完成您的作業后釋放記憶體),所以不要ptr = int;使用
ptr = new int;
使用temp = x;也是錯誤的,因為您將指標 temp 的地址分配給變數值,使用temp = &x;應該是正確的方法
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/314976.html
