C語言 若有定義int p,則表示式p的值就是p所指向的變數的地址值加

時間 2021-08-11 17:09:40

1樓:末了待續

這是錯的,p沒有進行初始化

2樓:匿名使用者

我也是剛學指標。

p就是所指向的變數的地址。

*p就是所指向的變數的值

因此 p++就是地址值加1吧,額,我也不確定。因為我還沒瞭解到有關儲存地址的知識。

我覺得應該是加1了。

3樓:

錯誤,要看變數佔用的地址空間,這裡是加sizeof(int)printf("%d",*(p++));

printf("%d",*(p--));

兩次輸出結果怎麼可能一樣呢,

printf("%d",*(p++)); 輸出2printf("%d",*(p--)); 輸出3

4樓:劉文正粉絲

你把++和--寫p的前面

*(++p)

*(--p)

你這玩意和指標一點關係也沒.....你前面學的不好啊~自增和自減最好是寫成單獨的語句

你的那個p沒用,用a就可以表示

為啥指標要區別型別?就是因為這p++這裡是加1,但邏輯上有加sizeof(int)個數.如果double和int都用一個指標,那鬼知道這p++在邏輯上是加sizeof(int)個還是sizeof(double)個?

5樓:匿名使用者

若有定義 int *p, 則表示式 p++ 的值就是 p 所指向的變數的地址值加1?---這句話是錯的。p++後的結果是地址加上一個整數,該整數指標指向變數型別在記憶體中佔用的位元組長度。

//為什麼兩次輸出結果一樣--因為語句中是對++或--之前的值進行操作。改為++p,--p就會不一樣了。

回答完畢。

6樓:

這個要怎麼講呢,p在定義的時候是有初值的,只是沒有進行初始化,這個值有沒有效不一定,所以p所指向的是不是變數不好說,但是p加一後,地址是肯定挪了一位......

這樣吧,沒有初始化,就是為地址無效,即沒有指向變數,所以後面的那句話視為錯誤.

7樓:

不可能一樣。printf("%d",*(p++));輸出2,而printf("%d",*(p--));輸出3。因為p=&a[1]=2,所以printf("%d",*(p++));輸出*p=2;那個++在輸出後執行,使p指向a[2]=3;接著printf("%d",*(p--))輸出*p(注意這時p+1了,指向了3)=3;完成後才對p時行--操作又使它指向2。

8樓:忽忽上升

經測試輸出結果不一樣。你的問題就不對。

另外p++是先輸出再加1,p--也是先輸出再減1.

9樓:閆鵬程程

執行p++後p所指向的地址是p所指向的地址加sizeof(int)

int*p,p++的值就是p所指向的變數的地址值加1,這為什麼錯

10樓:

當然錯!若p==12345,12345+1==12346,而執行p++後p卻==12349——因為p++是+一個sizeof(int),時下通常是4位元組。

11樓:pp龍飛

這不是p所指向的變數的地址值加1,而是加一個int單位位元組數(c++是4,不同編譯環境不同)。那麼p++的值就是p所指向的變數的地址值加4啊。明白了嗎?複習一下吧,書上有的。

12樓:匿名使用者

不是變數的地址值加一,而是加四。你首先得明白指標式幹什麼用的。為什麼會有資料型別這個東西

13樓:匿名使用者

//看下這個程式你就知道是怎麼回事了.

#include

#include

void main()

14樓:匿名使用者

是地址值加1所對應的那個值吧·

c語言題:若有定義int a[9],*p=a;則p+5表示( )

15樓:匿名使用者

答案選:b

剛剛看到a[5]就選了

*p=a;指向的就是a[0]

p+5就相當於向後移動5個,就是a[5],表示地址如果是*(p+5),就表示值

16樓:匿名使用者

你好,選b。

int *p = a表示指標p指向陣列a的首地址。也可以說是a[0]的地址。所以p+5指向a[5]的地址

c語言中定義int *p;p指向a[0]; 這個表示式是什麼意思 *p++; 與*(p++)一樣嗎?

17樓:匿名使用者

*p++和*(p++)是一樣的

*p++邏輯上等價於

*p;p+=1;

*(p++)邏輯上等價於

*(p);

p+=1;

18樓:匿名使用者

*p++; 表示p當前指向位置a[0]的值,然後p移動int型別4個位元組,指向a中下一個元素,也就是a[1].

*(p++)表示a[1]的值 。

19樓:召走刀文

你說的沒錯,兩個表示式不一樣

*p++; 是先取值,再指標偏移

*(p++)是指標偏移,再取值。

不過對於優先順序不清楚地時候,最好就別這麼寫給自己找麻煩。大多數公司裡面的編碼規範是要求分成兩句寫的

20樓:我的

對於p值來說*p++和*(p++)當然是一樣的,但是你獲得的值就會不同:

例如int a = *p++;

int b = *(p++);

a和b不同,但是p的值一樣。

21樓:葛朋

我試驗了一下,結果一樣,說明這兩個等價,實際結合理論,比如int a[5]= *p=a *p++的意思是先求*p是a[0]=1 然後*p++的值是1,p=2; 如果是*(p++)的話,p++的值沒變,p的值加1,然而*(p++)的值就不變了,所以結果一樣 不知道朋友能否明白

22樓:匿名使用者

很簡單啊,p++是在執行本語句以後p再加1的,以後建議使用++p。可以避免一些疑惑!仔細看看i++與++i的區別就知道了。

c語言……….若有定義語句:int a[4]={1,3,5,7},*p;p=a;則*(p+1)的值

23樓:輕曳風鈴

*(p+1)=3

樓主追問

char s[10] = ;則strlen(s)的值為strlen是計算字串長度,遇到'\0'結束返回長度,所以是則表示式pn->b/n.a * ++pn->b的值是

pn結構體指標指向結構體n,n被初始化成

pn->b/n.a * ++pn->b

<=>pn->b = pn->b+1;

pn->b/n.a*(pn->b + 1)=3/1*2=6結構體的->運算子優先順序大於++

++這裡是前加,先加1後再使用加後的值

24樓:苓愛你無言

*p=a中的a就是&a[0],即a[0]的地址,所以*p(p+1)=a[1]的值,即為3

25樓:匿名使用者

p指向a的首地址,所以*(p+1)=a[1]=3

c語言若有定義語句int b2則表示式b《2b 的值是

我感覺這題答了以後 採納率又會下來。2 的二進位制形式 0010 b 2 1000 8 3 b 3 2 1 所以最後的表示式的值就是 8 至於你說的為什麼3 b 1.首先你得分清 與 運算。是按位或 就是你說的 011 010 後結果為 011 而在 的世界裡,只認兩個值 0 和 1。即真和假 所有...

C語言中,若有int a 5則逗號表示式a 2 6,a 3,a 5的值是

風雷九州 沒錯,就是12。號優先順序高於,號表示式,要計算 賦值 直接就是a 2 6 12了,後面那些a 3,a 5什麼的都沒用 我認為是17,因為這是一個逗號表示式,裡面有2個逗號,3個式子!逗號表示式的值,以最後一個式子的值為值,也就是a 5。但是他是從前往後依次做算的,運算第一個式子後,a是1...

若有定義 int a則表示式a a的值為9請高手說明下這個過程

倒黴熊 二維陣列是按行儲存的也就是如下這樣 a 0 0 a 0 1 a 0 2 a 0 3 a 1 0 a 1 1 a 1 2 a 1 3 a 2 0 a 2 1 a 2 2 a 2 3 而a表示的就是a 0 0 所在的地址。所以 a 2 1 a的值為9。 陽光上的橋 請你在草稿紙上畫一個三行 四列...