已知 int a 31,2,3,4,5,6p a則下列表示式不是4的是

2021-03-22 09:18:26 字數 2973 閱讀 9112

1樓:匿名使用者

這道題很難,需要仔細考慮。

a陣列資料如下:

a[0][0]:1

a[0][1]:2

a[0][2]:3

a[1][0]:4

a[1][1]:5

a[1][2]:6

p是指向有三個元素陣列的指標,也可以認為是乙個指向指標的指標。

a.*p為三元素陣列的首位址,+3後會指向陣列中的第4個元素,發生了越界,還好,a是二維陣列,越界後不會出錯,而是指向了二維陣列中的第二個三元陣列的第乙個元素,取值得4。

b.與a相比少了乙個間接運算子*,所以它表示的是乙個位址,非值。

c.p+0後沒有任何變化,與a相同。

d.a[0][3]其實越界了,好在後面還有a[1][0]等資料,於是將a[1][0]中的陣列4作為其值。

答案是b

編寫程式驗證了答案,顯示如下:

*(*p+3)=4

*p+3=1638204

*(*(p+0)+3)=4

a[0][3]=4

2樓:

選ba陣列資料如下:

a[0][0]:1

a[0][1]:2

a[0][2]:3

a[1][0]:4

a[1][1]:5

a[1][2]:6

p是乙個指向3個元素陣列的指標,就是說p+1相當於&a[1],這裡的p+1會移動乙個一維陣列的大小,就是說3個int的大小

*p相當於a[0]

所以a和c一樣,*p+3相當於&a[0][3],指向4,再解引用就變成了4

從上面的分析就看出了d是對的,而b是指向這個4的指標

3樓:o寒風夜襲

(*p)[3]=a=a[0][0]=1;

*(*p+3)=a[1][0]=4;

*p+3=&a[1][0],其值指向a[1][0]的位址,*(*(p+0)+3)=*(*p+3)=4;

a[0][3]=3;選d.

4樓:匿名使用者

答案是b

猜測法:p+0還是p,所以a、c相等,而b明顯與a不同,故答案是b。

知int a[]={1,2,3,4,5,6},*p=a+2;則p[2]的值是( c )。

5樓:匿名使用者

a+0指向1,a+1指向2,a+2指向3,*p=a+2;那麼p指向3,p[2]就是p+2指向的資料

p+0指向3,p+1指向4,p+2指向5,所以p[2]的值是5

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

6樓:玄殤隕

main()

;int *p;

p=a; //p指向的陣列

printf("%d ",*p); //*p指的是陣列a的首位址的資料就是zhi陣列的第一dao個元回素,是1

printf("%d ",*(++p));//*(++p)是先自答

加再用,p指向第乙個元素,自加1後就是指向第二個元素,是2

printf("%d ",*++p); //因為p已經指向的第二個元素,再自加1就是第三個元素,是3

printf("%d ",*(p--));//p--是先用再自減,所以輸出是3,然後p自身再做自減1,

p+=3; //上一步p自減一后指向第二個元素,再後移3個元素就是5

printf("%d %d ",*p,*(a+3));/*(a+3)就是a[3]就是第4個元素就是4}

7樓:樂vov樂

main()

;int *p;

p=a;

printf("%d ",*p); //陣列a第乙個copy元素是什麼,是:1

printf("%d ",*(++p));//第2個元

素是什麼,是:2

printf("%d ",*++p); //第2個元素自增1是什麼,是:3

printf("%d ",*(p--));//還是問第2個元素是幾,但是上乙個表示式後,第2個元素就成了:3

p+=3; //向後移動3個位置

printf("%d %d ",*p,*(a+3));//輸出第5個元素是幾:5 輸出相對首位址偏移3個位置的元素:4 即a[3]}

已知:int a[]={1,2,3,4,5,6},*p=a;下面表示式中p值為5的是___ ___。

8樓:聽不清啊

表示式中 *p 值為5的是___ (a)p+=3;*(p++); ___。

9樓:匿名使用者

(a)p+=3;*(p++);

設有變數定義 int a[3][2]={1,2,3,4,5,6}, (*p)[2]=a;表示式**(p+2)=*p[2]的值?

10樓:潘良段幹宛菡

(*p)[2]=a表示來

將p定義為乙個指向自

含2個元素的一維陣列的指標變數,那麼二維陣列就可以看作是一維陣列a[3],其中每乙個元素都是乙個一維陣列,a[1]=,a[2]=,a[3]=;

則p+2就指向了a[3],*(p+2)是a[3]的首位址,**(p+2)就是a[3]的首元素,即為5。

11樓:匿名使用者

**(p+2),*p[2]這兩個表示式是等價的,當然,**(p+2)=*p[2]是乙個賦值表示式,最終的值還是a[2][0],即5

12樓:匿名使用者

作用是:a[2][0]被 a[0][2]也就是a[1][0]賦值

13樓:匿名使用者

**(p+2)的值為5

已知inta51,2,3,4,5pa2則P的值是

因為 p a 2,也就是說把集合a中的元素全部加上2就是 p中的元素 所以 p 指標p指向陣列a 2 的位置,所以 p的值為3 p 知int a 1,2,3,4,5,6 p a 2 則p 2 的值是 c a 0指向1,a 1指向2,a 2指向3,p a 2 那麼p指向3,p 2 就是p 2指向的資料...

設有變數定義inta21,2,3,4,5,6pa表示式p2p

p 2 a表示來 將p定義為乙個指向自 含2個元素的一維陣列的指標變數,那麼二維陣列就可以看作是一維陣列a 3 其中每乙個元素都是乙個一維陣列,a 1 a 2 a 3 則p 2就指向了a 3 p 2 是a 3 的首位址,p 2 就是a 3 的首元素,即為5。p 2 p 2 這兩個表示式是等價的,當然...

設有語句inta10pa,則下面的語句中不正確的是

前三個賦值語句都是正確的。選項d是錯誤的,a是陣列,只能對陣列元素賦值,要有下標。選d。d是錯的,陣列名是位址,這個位址不可以修改。設有以下語句,則 不是對a陣列元素的正確引用,其中0 i 10 四個選bai項中,d不是對a陣列元素的正du確引用。int a 10 p a 相當zhi於 int a ...