C語言選擇題,關於指標陣列。求詳解

時間 2022-10-20 10:22:30

1樓:遺失的迷惘

int a[2][3]; 定義了乙個二維函式,每一維陣列有三個元素。

int (*pt)[3]; 定義了乙個陣列指標,也就是定義了乙個指向有三個元素的指標,即該指標,每次自加1,位址跳過三個int

pt=a; 就是讓pt指向a[0],注意a[0]是乙個陣列位址,裡面有三個元素

對於a選項,pt[0][0]是正確的,pt[0][0]等價於a[0][0]

對於b選項,不正確,因為pt+1就是a[1], *(pt+1)[2]相當於a[3][0]不對。

因為運算子優先順序,大於*,因此*(pt+1)[2]就是*pt[1+2] 也就是*a[1+2]。而*a[3]就等價於a[3][0]。越界了

改成(*(pt+1))[2]就對了,相當於a[1][2]

對於c選項,正確,*(pt[1]+2) 相當於a[1][2]

對於d選項,正確,*(a[0]+2)相當於a[0][2]

2樓:天天向上知識店鋪

b.*(pt+1)[2] 選項是錯誤的。pt已經指向了a,但是pt屬於行指標(陣列指標),每移動一次要移動3個儲存單元,pt+1相當於移動一次(也就是一行),有於方括號的優先順序高,所以下來執行的是(pt+1)[2],表示向後再移動2行並且讓指標由行移動變為列移動,然後在執行最前面的*取值,相當於結果是a[3][0],這樣的話下標就會越界,所以錯誤。

c語言選擇題,關於指標概念說法不正確的是,求詳解 20

3樓:

d錯誤,選d——因為前三項都正確,只好選d;但這項也不嚴密,null可以直接給任何型別的指標賦值,難道null不是整數?

4樓:匿名使用者

a.乙個指標變數只能指向同一型別變數

不一定非得是變數

c語言指標選擇題 求解析

c語言選擇題求詳解

5樓:匿名使用者

選擇d,可以用任意表示式

表示式只要值為非零整數,即為真,否則為假

c語言選擇題求詳解

6樓:匿名使用者

c因為有(),所以ptr先與*結合,所以ptr是指標。剩下的成分回

用來說明ptr是什麼指標。因為剩答下的成分是int [m],是乙個具有m個int型元素的陣列形式,所以ptr是乙個指向具有m個整型元素的一維陣列的指標。

c語言選擇題,求詳解

7樓:匿名使用者

答案:a.123

詳解抄:首先題目定義了

乙個bai字元陣列s,其中存du放了字串"123",隨後定義了字元型指zhi針p,並且dao使p指向字串s.

之後,題目開始輸出結果,注意輸出方式*p++,這是本題關鍵所在,根據運算子結合順序,先輸出*p,也就是字串第乙個字元"1",之後執行p++,指標後移指向字元"2",之後的兩次輸出同理。

希望能幫助到你。

8樓:金城杞人

答案就是a,說b的上個執行結果截圖啊

後自增是先使用再增加。

p開始指向字元陣列第一項 s[0]。

修改一下,編譯器不同結果不同。

9樓:現實夢幻者

答案源是b

原因就是,printf的執

bai行順序,因為它的執行順序是從右向左,再du從左往右輸zhi出

並且後dao置++,會重新開起一塊記憶體來存放原值,所以前面的值直接讀取存放的,如果不是指標,是數值需要注意

當然這裡是指標,每個都有它的位址,直接是把結果儲存了所以3 2 1

10樓:

陣列指標沒有任何變化,輸出都是111。。

因為指標p是指向了第乙個字元1,而%c是讀入並列印出來一回個字元。。而printf中*p意思是答s第乙個值,讀入到列印函式,列印到螢幕完了然後把這個讀入值+1,而陣列指標值還是沒有變的,總是指在1的位置。

可以用下面更改程式驗證:把其中乙個變成前++#include

main()

++*p,讀入數值+1·,最後結果是2,1,1。。說明*p只是第乙個字元值,而原陣列指標是沒有變化的。

11樓:

應該選b。

程式結果:

解析:*p 表示p是乙個儲存位址的變數

在這個程式中專當執行完p=a;時,*p為屬"1",*p++也為"1"

*p++和*(p++)相同

printf的執行順序是從左到右

*p++是把*p儲存的位址+1,而p的儲存位址是陣列的第乙個,所以相當於把p的指標往後移一位,也就是說把p指向的陣列的位置往後移一位。所以就是321

12樓:三天打魚

321 選b

p指向字串s首位址

那個呼叫函式是從右到左執行的 所以先執行最右邊的*p++ 得到1函式的引數壓棧是從右向左執行的……

c語言指標陣列問題 求高手詳解

13樓:黃邦勇帥哥哥

首先m[12]=

語句if(k<3) p[k]=m+2*k*k;

的計算過程式,當k=0時,p[0]=m也就是指標p[0]指向的是陣列m的開始

當k=1時,p[1]=m+2;因此p[1]指向m+2的位置,也就是從數字4開始的位置

當k=2時,p[2]=m+8;因此p[1]指向m+8開始的位置,也就是&m[8]開始的位置,即陣列m中的第9個元素的位址,也就是16

再來看for中迴圈語句中的指標表示式,首先下標運算子p[k]是與*(p+k)等價的,

(*(p+k))[4-k];

=(p[k])[4-k]

=*(p[k]+4-k) //注意這一步,不能把括號折開來算,而應按p[k]與*(p+k)等

價的替換來計算,不然在某些地方會出錯。

=*(&p[k][0]+4-k) //在計算位址相加時,應把p[k]這樣的式子轉換為前面帶有

&位址運算子的表示式才能直接相加,否則會出錯,因為

p[k]就是指的p[k][0]的位址,因此應這樣換算

=*(&p[k][4-k]) //這裡就可以位址直接相加了

=p[k][4-k] //這是最後結果。

上面的計算如果你的理解能力強,你也可以用文字去描術,什麼指標偏移多少個單位,又指向**,這樣來描術,但本人認為文字描術容易出錯,因此採用數學的計算方法,科學,安全,不易錯。

再來看p[k][4-k]究竟是什麼,

當k=0時,就是p[0][4-0]因此,因為p[0]是指向的陣列m的開始,因此p[0][4]就是指的陣列中下標為4的元素,也就是8

當k=1時,就是p[1][4-1]=p[1][3],因為p[1]是指向的陣列m+2以數字4開始的位置,因此p[1][3]就是指的從4的位置起(4的下標對於指標p[1]來講為0),向後的下標為3的位置的元素,也就是10

當k=2時,就是p[2][4-2]結果就是m+8開始的下標為2的元素的值,就是20

因此最後sum的值是8+10+20=38

14樓:匿名使用者

值 : 0 2 4 6 8 10 12 14 16 18 20 22

陣列:m[0] m[1] m[2] m[3] m[4] m[5] m[6] m[7] m[8] m[9] m[10] m[11]

指標 p[0] p[1] p[2]

以上是參考圖,先解釋一下,首先p[k]=m+2*k*k ,m是陣列首位址m+2*k*k 相當於m[2*k*k],一次將位址付給p[3],p[0]指向m[0],一次類推。p[3]為指標陣列,也就是說陣列每個元素都是乙個指標。

現在解釋 sum+=(*(p+k))[4-k];(p+k)相當於p[k].(*(p+k))[4-k];在p[4]的基礎上向後面移動(4-k)步指標。例如 (*(p+0))[4-0];相當於p[0]所指的m[0]向後移動4步到m[4]為8 。

依次類推,sum=8+10+20=38

希望能幫助你!

C語言選擇題,c語言選擇題

11.d 12.b 13.a c 都是正確的,估計出題者讓選c 14.d 15.b 16.b 17.b 18.d 19.c 沒有正確選項,因為n沒有賦初值。但c 僅此錯誤,其他項還有別的錯誤 20.c d 陣列名即為頭指標,指向a,後移三位,指向d,輸出def。b cpy 意為 copy。c sca...

C語言選擇題問題。c語言選擇題

你做對了!4.a 形參和形參不管是否同名,必須型別相同。但是二者占用不同的單元。沒有return語句的函式沒有返回值,也可認為返回void 實參可以是任意型別,但形參必須與形參型別相同。形參只能是變數!c語言選擇題 選b區域性變數也叫自動變數 在函式裡定義int a也就是auto int a a的作...

c語言選擇題,詳解,C語言選擇題,詳解

cstruct student為結構體型別引用結構體變數中的成員的值的方式為 結構體變數名.成員名 a不符合 通過指標引用結構體變數是用 p age表示。p 表示p所指向的結構體變數,p age是p指向的結構體變數中的成員age。注意 p兩側的括號不可省,因為成員運算子 優先於 運算子,p.age就...

C語言選擇題,求詳解

選 a函式f a 在main 中呼叫,並且執行。但是無法改變struct a a的值。傳到函式f a 的a只是struct a a的拷貝。並不是把struct a a傳進去!這是不是值傳遞,而是引數傳遞。故 答案 a 選擇b 1002,changrong,1202 0struct a a 這裡是先建...

四道c語言選擇題求解題思路,四道C語言選擇題求解題思路

1.題說b錯是不對的,幾個語句可以同時用逗號分開的,算是乙個表示式.c 模取操作符左側運算元應該是int型別的 d 表示式 a a 7 c b錯誤在於,它將乙個值付給乙個表示式付給乙個值,而不是乙個變數.注意與 a a c b 的區別,賦值 號的左側一定是乙個變數,或是乙個變數的引用 2題a是合法的...