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。 陽光上的橋 請你在草稿紙上畫一個三行 四列...