若定義inta1,2,3,4,56,78910pa則值為3的

2021-05-22 11:52:25 字數 4091 閱讀 7699

1樓:匿名使用者

首先需要明白的是,自增自減的操作符比解引用操作符優先順序高。

對於專a,相當於p = p + 2, *p, p++,返回的是第二屬步的*p,是正確答案。

對於b,為p = p + 2, ++p, *p, 返回的是第三步的結果,是4

c肯定是錯誤的。

d,為++(*p),返回的是2,*p代表的是a[0],這個表示式相當於++a[0]

2樓:手機使用者

123+456+p+++++++*****ppp

3樓:匿名使用者

a p+=2 這時 p指向了a[2] *(p++) 因為是字尾,所以讀的還是a[2] 故為3

4樓:匿名使用者

答案選擇a。

理由如下:p+=2 表示指標移動兩個位置。

*(p++) 表示先輸出*p的值,然後p++。

總結:這裡就是++後置的問題:先使用,後運算。

c語言 int a[]={1,2,3,4,5,6,7,8,9,10},*p=a,則值為3的是

5樓:馮老師(必果學院

這bai是一個指

針求du值的問題,答案zhi應該是a

答案分析如dao下:

首專先,所有的逗號屬運算子,是從左向右進行的,其值為右邊結果計算的值

a p+=2,*(p++) 先計算p+=2 再計算*p 最後計算p++ 表示式的值在第二步計算確定的 為p[2] = a[2] = 3。表示式計算完畢之後,p指向4

b p+=2,*++p 先計算p+=2,再計算++p 最後計算*p 表示式的值在最後一步確定 為4

c p+=3,*p++ 先計算p+=3,再計算*p 最後計算++ 表示式的值在第二步確定為4,而後a[3]的值變為5

d p+=2,++*p先計算p+=2,再計算*p 最後計算++ 表示式的值在最後一步確定,為4,而後a[2]的值變為4

6樓:匿名使用者

答案a.

陣列定義是a[0]=1,a[1]=2,a[2]=3, ...,a[9]=10

a. p += 2使p指向a[2], *(p++)表示先取*p的值, 然後p增加版1(指向a[3]), 所以取權得的值是a[2]=3

b. p += 2使p指向a[2], *++p表示先p增加1(指向a[3]),然後取*p的值,所以是a[3]=4

c. p += 3使p指向a[3], *p++表示先取*p的值, 然後p增加1(指向a[4]), 所以取得的值是a[3]=4

d. p += 2使p指向a[2], ++*p對*p的值增加1, 所以取得的值是a[2]=a[2]+1=4

還有一種寫法是(*p)++, 表示先取*p的值, 這個值再增加1

20懸賞!!**等!若有以下定義:int a[]={1,2,3,4,5,6,7,8,9,10},*p=a; 則值為3的是( ) 20

7樓:匿名使用者

*p=a,陣列名錶

bai示地址,該

du句話的意思就是p=&a[0],p+=2表示p=&a[2];

接下zhi來我們看看* ++的優dao先級版,兩個優先順序是一樣的,屬於右權結合。*(p++)首先計算p++,由於++在後面,所以*(p++)相當於計算*p,然後p++;所以a和c相同,至於d ++*p表示++(*p),將*p的值++。我不知道樓主用的什麼編譯器。

對於我的理解,如果是printf(「%d」,*(p++))這種樣式輸出的話,a 輸出是3,b輸出是4,c輸出的是4,d輸出是4

8樓:匿名使用者

應該是a,*(p++)和*p++是一樣的,都是先算p++【為p】然後算* 符【為*p=3】最後p自加

這是* 和++的右結合性。

若有以下定義和語句:int a[]={1,2,3,4,5,6,7,8,9,10},*p=a;不能表

9樓:莊政警

答案是d

a *p就是*a就是a[0]

b p[3]就是a[3];

c *a就是a[0]

d a[10] ,a陣列只有10個元素,最後一個是a[9], a[10]不屬於a,這是記憶體越界

int a[][4]={1,2,3,4,5,6,7,8,9,10} *p=*(a+1) 則值為

10樓:匿名使用者

選擇 b

int a[4] = ;

相當於int a[4] = ,,};

而int * p = *(a + 1);

表明 p 此時指向 5

所以要想輸出9, p 需要 += 4;

剩下就是 * 和 ++ 優先順序的問題了.

***************

* 和 ++具有相同的優先順序

* 和 ++ 具有 右結合的特性

所以 *p++ 就相當於 *(p++)

但是..... .... 尤其注意, 後置的 ++ 返回的還是當前的值, 然後整個表示式 求值完之後 才 += 1

所以 b 是正確 答案

對於c, ++p, p此時指向10, 然後 *p, 結果會是陣列中的10(此處是陣列中的10)

對於d, ++*p, 首先*p 結果是9, 再++, 輸出10 (此時的10 只是 9 + 1, 而不是陣列中的10)

若有int a[10]={0,1,2,3,4,5,6,7,8,9},*p=a;則輸出結果不為5的語句

11樓:瀚漠

答案:d

對於陣列a[10],a就是該陣列的首地址,定義指標p賦值為a,那麼a和p的操作基本相同:

a[5]=p[5]=*(a+5)=*(p+5),對於d選項,p[5]是個int值,再取*就不對了。

12樓:假面

答案:d

對於陣列copya[10],a就是該陣列的首地址bai,du定義指標p賦值為a,那麼zhia和p的操作基本相同dao。a[5]=p[5]=*(a+5)=*(p+5),對於d選項,p[5]是個int值,再取*就不對了。

整數(int型別的常量)有幾種書寫形式,程式中的整數一般採用十進位制寫法。用十進位制方式寫出的一個整數就是普通數字字元組成的一個連續序列,其中不能有空格、換行或其他字元。

13樓:匿名使用者

a可以理解為這個陣列的首地址

a[3]是指向第4個元素

所以p指向第4個元素

p[5]是從p後的5個 也就是第9個元素所以b=9

說明語句如下:int a[10]={1,2,3,4,5,6,7,8,9},*p=a;則數值為6的表示式是( )。

14樓:匿名使用者

d。表示式「*p = a」說明p指向a[0]的位置;

那麼 *p + 6 = a[0] + 6 = 7; a錯;

p指向a[0]的位置, 則p + 6 指向a[6]的位置,那麼 *(p + 6) = a[6] = 7; b錯;

p是一個指標,p的值本身是一個地址,p + 5顯然不可能為5; c錯;

上面說了, p指向a[0]的位置,那麼 *p = a[0] = 1;

*p += 5; 等同於 a[0] += 5; 等同於 a[0] = a[0] + 5 = 1 + 5 = 6;

顯然只有d正確;

15樓:匿名使用者

d 一開始定義了 *p=a,就是指等於a[0];它指向的是一個值!

*p+=5,可以變換一下 *p=(*p)+5 不就 a[0]+5=6.....

a = 7 ;

b 的值是 a[6]=7

c 是一個地址 &a[5] 不是值!

16樓:林聲飄揚

da> *p+6=>1+6=7

b>*(p+6)=7

c>p+5 是地址

d>*p+5=>1+5=>6

所以選d

若已定義 int a 50,1,2,3,4p a,則以下輸出結果為3的是(

選b。p 3 等同與a 3 陣列的名字a,是表示陣列首地址的地址常量。其值就是 a 0 p a 那麼p的值也是內 a 0 p和a都表示地址容,所以 就是取地址對應的值。a 2 就是首地址值往後 2的地址,也就是 a 2 那麼 a 2 就是a 2 的值2。同理 p 2 也是a 2 的值2。p 3 是不...

在16位編譯系統上,若定義int a10,20,30p當執行p後下列敘述錯誤的是A p向高地址移了

嗯,你的想法是正確的,應該是int p a 或者int p a 0 在16位編譯系統上,若有定義inta 10,20,30 p a 當執行p 後,下列錯誤的是 a錯,p與a 1等價p向高地址移動一個int型別位元組數 這個應該是選a哇 另外inta p a 應該是inta p a c語言,int a...

若有定義 int a 41,204,6,8,10則初始化後,a得到的初始值

a 2 2 8.a 0 0 1,a 0 1 2,a 0 2 0,a 0 3 0,a 1 0 0,a 1 1 0,a 1 2 0,a 1 3 0,a 2 0 4,a 2 1 6,a 2 2 8,a 2 3 10.陣列定義,從 前往後,個數不足專的補屬0。是8,你是3行4列的陣列,所以1,2,0,4是第...