int a1,2,3,4,y,p a執行語句yp後,a中元素的值為什麼會是1,1,3,4請詳細解答

2021-08-11 19:13:51 字數 3639 閱讀 2260

1樓:匿名使用者

y=(*p++)-- 並不是陣列裡的每乙個元素都變化的,只變化了乙個的

一開始p =a[0]的位址

p++ = a[1]的位址

*p++也就是a[1]

a[1]--

陣列就變成1 1 3 4

這是我個人看法,請參考~~

2樓:匿名使用者

不對啊,我覺得是a[0]被改了,然後我試了一下,確實是只有a[0]被改了

因為後++返回的是p未加一之前的值,所以*的是p,也就是a中的第乙個元素

這樣再--,修改的就是a[0]了。

後面三個還是保持原來的值,y=(*p++)--這句話只影響了第乙個值

3樓:亂舞大螃蟹

y=(*p++)--

根據運算子的優先順序,這句話你可以讓它變個更直觀的形式:

y=(*(p++))--

現在就清晰了,首先計算的是p++,p++之後實際p指向的不是第乙個元素了,實際指向的是陣列的第二個元素

再來*(p++) 實際就是取得陣列的第二個元素的值。

再來(*(p++))-- 實際就是對取得的陣列的第二個元素的值進行-1運算。又因為是後--,所以直接將第二個元素的值-1了。

4樓:

指標p初始化後指向a[0]

執行語句y=(*p++)--的時候分兩步,先(*p++)運算後將p的指向調整到了a[1],取值2,然後賦值給y,最後a[1]執行--操作,結果就是a[2] = 1了,a[2] 和a[3]沒參與運算,所以不變

c語言裡++的優先順序高於*,並且運算優先不能用()來表明,(*p)++ 會將儲存內容自增,*(p++)則會先自增後取值,所以指標的自增自減操作不會和*運算同時進行,會先*運算取值後再自增自減操作

已知:int a[]={1,2,3,4}, y, *p=a;則執行語句y = (*++p)--;之後, y為何為2?

5樓:

前置自增自減,先自增自減,在使用值,後置自增自減,先使用值,再自增自減

首先,p指向 a[0]

++p,p指向a[1],則*++p就是先指向a[1],在取a[1]的值,為2

後面的--是先取 *++p的值,之後再自減,所以y還是為2

6樓:匿名使用者

當i=1時,執行x=i++語句,會先將 i 賦於x,然後才執行i=i+1,所以x=1, i=2

如果寫成x=++i,會先執行i=i+1,然後將 i 賦於x,此時x和i都為2

7樓:胡說八道

這個是乙個算符先後順序問題

先說題目:++p表示指標往後加1 , 這時y=2,而--是在賦值以後執行的,所以y=2,而a=;

再說x=i++,同樣的道理,先賦值,再自增,因此x=1; i=2;

已知:int a[]={1,2,3,4}, y, *p=a;則執行語句y = (*++p)--;之後, 陣列a各元素的值變為?

8樓:匿名使用者

已知int a=, y, *p=a;則執行來語句y = (*++p)--;之後自, 陣列a各元素的值變為1,1,3,4 。

標準函式int(x)其基本功能是得到乙個不大於x的最大整數,如int(3.59)=3,int(-2.01)=-3。

int函式是乙個用途很廣的函式,在教學中能有目的的分列其使用技巧。

c語言沒有規定各種整數型別的表示範圍,也就是說,沒有規定各種整數的二進位制編碼長度,對於int和long。

9樓:

b正確,選b。++p使p指向了2,*++p就是a[1],(*++p)--就是a[1]--。變數y的值是2,y=a[1]--;是把a[1]的值賦給y後才對a[1]作減一運算。

10樓:匿名使用者

執行過程是p++,然後y=*p;然後(*p)--。

即p的指標位增加一,然後賦值,最後指標對應值減一,即y=a[1],然後a[1]=a[1]-1;

綜上答案是b、b

11樓:匿名使用者

先++p,p指向a[1],

再*p,=2;

賦給y,y=2;

最後*p=2,--後,*p=1

所以是b b

c語言 定義則執行y=(*--p)++後,y的值是

12樓:

這好解釋啊,因為++是後++,要等到把(*--p)的值賦給y後(*--p)的值才會增1。所以結果是y=1,a[0]=2。你可以用下面的**驗證:

int main(void),y,*p=&a[1];

y=(*--p)++;

printf("%d %d\n",y,a[0]);

return 0;}

執行後y的值是( ) main() {int a[]={1,2,3,4},y,*p=a; y=*p++;

13樓:匿名使用者

y的值為1

*p=a將a陣列的首個元素的值賦給p,即將a[0]的位址賦給指著py=*p++將p所指的位址中的值賦給y,指標p向後移動一位指向p[1]

所以y的值為1

14樓:手機使用者

程式最好排一下版。

首先解釋一下for迴圈

for(i = 0; i

i = 0為初始化語句,只有第一次迴圈時會執行。

i < n為迴圈條件,每一次迴圈前都會進行檢查。

++i為附屬操作,每一次迴圈後都會執行

第一題:

main()

printf("%d\n",y);

}第一次經過for(x=1,x<3;x++) 後y+=p[x] 應該是 y=y+a[2]而不是y=y+p[2]

第一次執行迴圈, x 為1,因此下面一句為 y = y + p[1]p的初值為&a[1],即p[0] = a[1], p[1] = a[2]

第二題main()

;int i,j,s=0;

for(i=1;i<3;i++)

printf("%d\n",s);}}

第一次進入迴圈i = 1; j = 0; s = s + a[1][0];

int a[5]={1,2,3,4,5},*p; p=a; printf("%d %d",*p,*(p++)); 為啥輸出為1 1

15樓:金色潛鳥

因為 *(p++) 用的是bai 字尾加加,du按規定,在表示式內不自zhi

增,出了表示式後dao

再自增。

所以:printf("%d %d",*p,*(p++));

就等版於:

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

輸出權 1 1

再執行 p=p+1; (位址增 1*sizeof(int) ).

----------

你可以列印位址,看p指向的位址變化

printf("%p\n",p);

printf("%d %d\n",*p,*(p++));

printf("%p\n",p);

設有語句int a 3則執行了語句a a a a後

a a a等價於a a a a,a 6a a等價於a a a,a 12 所以變數a的值是 12 擴充套件資料由於變數讓你能夠把程式中準備使用的每一段資料都賦給乙個簡短 易於記憶的名字,因此它們十分有用。變數可以儲存程式執行時使用者輸入的資料 如使用inputbox函式在螢幕上顯示乙個對話方塊,然後把...

int a 2,b 0,c 0執行語句c b a 後a的結果為?c的結果為

include int main 執行結果為 a 2c 0 分析如抄下 襲 因為c b的邏輯值為0,那麼不管a 是真還bai是假du,整個表示式的值都是zhi假,而c語言的dao處理是直接略過a 了,即不執行a 操作了,所以a的值輸出還是2。c語言程式設計中,sinx怎麼表示?在寫c語言的程式時,在...

inta3,b2,c1則語句abc執行後b的值為

那個是條件表示式,因為沒乙個是0,所以結果為真,所以是1 人家問得是最後b的值而不是整個表示式的值 所以答案為2 若已定義 int a 3,b 2,c 1 則語句 a b c 執行後b的值為 這是短路原則,只要有乙個為真則整體就為真了,所以計算出 a後判斷他是true,所以 b c就不會計算 c語言...