c 問題,為什麼int p 0可以表示為空指標,而int p 100卻不能表示位址呢

2021-04-18 04:34:06 字數 3334 閱讀 7736

1樓:匿名使用者

當然可以了. 只是約定成0 等於 空指標是乙個習俗一樣.

你如果寫乙個程式. 裡面統一約定成=2 是空指標也可以啊.

只是某些地方你判定乙個指標是否有效要麻煩一些.

c語言中 int *p=null; 則這條語句是不是錯的? *p=0

2樓:匿名使用者

前面int *p=null;就是定義bai乙個du空指標。zhi但後面*p=0;可以正

dao常執行的前提,是這個p指標指向了內乙個合法記憶體空間容。

譬如:int a;

int *p=null;

p=&a;    /*p指向變數a的位址*/*p=0;    /*這裡的意思就是把0寫入p指向的記憶體空間,也就是變數a存放的空間,這樣就改變了變數a的值*/

這樣是可以的。

3樓:匿名使用者

沒錯,這是定義乙個指標變數p,並賦值為空,用以說明該指標沒有任何指向性。

該指標的值為null在儲存單元中的指向為0,也就是不指向任何位址。單看這一條語句的話,是沒有意義的。

4樓:匿名使用者

p賦為null,之後再賦值是可以的,但*p=0,本身就有問題

5樓:非常可愛

c語言bai

中int *p=null意思是:

c語言du中p裡面是隨機值,在zhiint *p=null,這個p是有值的,dao為null;

int *p=null指向乙個空指標專,等於屬 int *p=0; null等於0;

可以隨時讓這個p指向其他位址。定義指標,將它初始化為null,這樣做程式設計更規範。

擴充套件資料

*p = null的作用

代表對乙個由指標p指向的變數(什麼型別,不知道),賦值為0,是將那個變數賦值為0。

int *p;

*p = null;

第一行**,定義了乙個指標變數p,其指向的記憶體裡面儲存的是int型別的資料;但是這時候變數p本身的值是多少不得而知,也就是說現在變數p儲存的有可能是乙個非法的位址。

第二行**,給*p賦值為null,即給p指向的記憶體賦值為null;但是由於p指向的記憶體可能是非法的,所以除錯的時候編譯器可能會報告乙個記憶體訪問錯誤。這樣的話,可以把上面的**改寫,使p指向一塊合法的記憶體:

int i = 10;

int *p = &i;

*p = null;

c語言中 int *p=a[0] 這樣表達對不對

6樓:待月上弦

這個表示式沒有語法錯誤,但是我估計不能達到你想要的結果,不知道你要表達什麼。給你分析下這個表示式的含義,這裡a[0]應該表示乙個位址,把這個位址賦給p,然後*p表示a[0]位址所指向的內容。我估計你的a是乙個一維陣列,你可能是想讓指標p指向a[0]這個元素,如果是這樣,則表示式應該改為int *p = &a[0]。

但是如果a是乙個二維陣列,則這個表示式有意義,沒有任何問題!

7樓:月光疾風

不對,因為p是指標,因此只能對應a[0]的位址,a[0]前面加個取位址符:

int *p=&a[0];

8樓:茜灬一

差不多,就是a應該是int陣列

c++中,int *p=new int是可有可無的嗎?

9樓:匿名使用者

int *p = new int;

是在堆中給變數分配了乙個空間,當用完後需要手動釋放。可以使用delete()函式

如果沒有int *p = new int; 是不能給p進行賦值的 因為沒有分配空間。

你也可以使用malloc分配空間,但最後釋放的時候要使用free()函式

10樓:匿名使用者

如果是int * p;

*p = 0;

那麼結果是不可預知的,可能正常執行,也可能立即崩潰,或者在任何無法預知的時候出現任何無法預知的問題。

如果是int t;

int * p=new int;

p = &t;

將會造成記憶體洩漏,如果多次出現這樣的情況,將會導致程式可用的記憶體越來越少。

11樓:千江月

不是可有可無的,得看你如何使用

舉例:1、 int *p = new int;

*p = 5;

此時p沒有空間必須申請

2、int a = 5;

int *p;

p = &a; //p不用重新申請空間,它指向a的空間。。

12樓:匿名使用者

看你對p賦值是什麼意思了。

如果說讓p指向另外乙個int *指標可以。

但是如果說你要 *p =1或者什麼就不行了。

必須得new int分配空間

c語言中*p=0表示?

13樓:

也得看p的定義了

如果int *p;*p=0;則是把p執行的int空間的值修改為0如果int **p;*p=0;則是把指向int空間的指標置為0。

上面這幾個例子,都得考慮p是否指向了有效記憶體位置,否則是危險的操作。

完整的範例:

int a;

int *p=&a;

*p=0;

相當於p指向的int空間,即a的值被改為0了如果p是更多級的指標或是指向更複雜的記憶體,可以把一級指標之外的內容看成乙個整體,比如:

int **p;

可以先 typedef int *intpointer;

intpointer *p;

然後*p=0;

就是把p指向的intpointer空間的值置為0.

諸如此類。

14樓:匿名使用者

int i,*p=&i;

*p=0; //這個相當於i=0;

15樓:匿名使用者

約定c/c++ 語言中 指標的初始化 為 null

而 null被定義為 (void *)0

16樓:匿名使用者

*p 首先p是個指標,*相當於對位址進行解引用,*p也就是指標指向的物件,對他進行賦值為0,就是對指標指向物件賦值為0

17樓:匿名使用者

考慮p是否指向了有效記憶體位置:

p所指向的變數的值賦值為0

18樓:_____一葉障目

表示指標p所指向的變數的值賦值為0

C問題,13題為什麼選A,這題為什麼選C

因為 在結構體中 只有a中的定義方式是正確的 bcd 都有錯誤 結構體具體定義方式可以參考書籍 這題為什麼選c 選c。觀察題目,每幅圖里有且只有兩個面積相等形狀相同的圖形 如下圖所示 d項中間那兩個梯形面積肯定不相等,因為左右兩邊的長方形的寬都不相等。23題為什麼不選b選c。實驗b只能證明二氧化塘不...

c語言問題,17題為什麼答案是double不是float,這兩個有什麼區別

sqrt函式返來回值是double。表達源式包含隱性轉換,規則就是盡量保證資料精度不丟失。對程式設計人員來說,double 和 float 的區別是double精度高,有效數字16位,float精度7位。但double消耗記憶體是float的兩倍,double的運算速度比float慢得多,c語言中數...

C語言問題為什麼選B過程求解大學C語言,為什麼選B,求解!

首先 是轉義字元,所以 的結果就是 其次,7s是指輸出字串佔7位,所以前方有空格。7s意思就是輸出後抄面的字串,襲 長度7 這裡如果bai7小於後du面字串長度則沒什麼意zhi義,dao還是按字串原樣輸出,如果大於後面字串,則會在字串前補空格 字串原本的雙引號是不會輸出的。所以a和c都不對,是轉義符...