C語言,陣列裡的指標問題,一道選擇題而已,求大神告知

2021-05-04 18:25:50 字數 5602 閱讀 5604

1樓:匿名使用者

a是一個陣列,那麼變數a本身,就是一個不可改變地址的指標。你說的沒錯,a就是首元素地址。

那麼注意,第一個for迴圈雖然是空語句,但將p進行了++操作,完成後,是將p指向了a陣列的末端後一位(結束標記位'\0')。

第二個for,p1從陣列末端開始,每次減一,一直到p1>=a,也就是陣列的首端,而p每次加1,實際是擴充套件了陣列的長度,將第4/5/6位分別賦值為3/2/1位,結果是d。

2樓:匿名使用者

首先你得了解字串是以'\0'結束的,也就是a實際儲存的是.然後你得了解指標加減,一個指標加1,就是指向下一個位置, 在這裡實際就是指向下一個字元(如果是int陣列,就是下一個整數).

理解了這兩點然後再來看你這道題:

首先*p = a,讓p指向陣列第一個字元'x',for(;*p;p++);讓p不斷往後移知道遇到』\0'('\0'的實際值是0),也就是迴圈結束後p指向了『\0'。for(p1=p-1;p1>=a;p++,p1--)*p=*p1, 把p1初始化指向'z',然後*p=*p1是用'z'覆蓋掉'\0',然後p1--就是p1朝後退一步指向』y', p++就是把p向後移一步指向'z'後面。。。接著賦值,直到p1跑到起始地址的前面去了,就是a的前面去了,迴圈結束。

最後*p = 0,就是給字串加上結束符'\0'...

越寫越亂,既然寫了就發出來吧。。。

一道c語言指標題,求大神解答,感謝

3樓:匿名使用者

int a=,y;

int *p;

//p指向a[1](8)。

p=&a[1];

//--p,使p先自減1,p最後指向a[0]。於是(*--p)等於a[0],y=(*--p)++;等同於y=a[0]++;。y等於5,a[0]最後等於6。

y=(*--p)++;

//輸出5,8,6,因為引數按從右往左壓入棧中。即先算*p++,又p指向a[0],所以*p++輸出6後,p指向a[1];再算*p,輸出8;最後算y輸出5。

printf(「%d,%d,%d\n」,y,*p,*p++);

4樓:匿名使用者

這題目輸出的結果

是5,6,6

解析:首先宣告一個整型陣列a,整形變數y,整型指標p。

p指向陣列a的第1個元素,也就是8。

接下來,指標p先--,指向了陣列a的第0個元素,也就是5。之後y取出p指向的內容,即5。之後p指標指向的內容又累加,即陣列a的第0個元素從5變成了6。

因此列印輸出y的內容是5,*p的內容是6,*p++的內容還是6(printf()執行完之後指標才移動,黃花菜都涼了)。

c語言指標一道選擇題,求解釋

5樓:橙心橙願

選擇ab 中int& c語言裡沒有這種型別,c++中有叫做引用

c fun函式返回的是指標的指標,而主函式中接收的是int型別的指標,型別不匹配

d 同b

6樓:匿名使用者

a返回值需要與函式型別一致

就是說int* fun() return s; 得一致

7樓:黑羽

答案是a吧

b,d中int& fun()是錯誤的,不能這麼定義c中因為s為陣列的名稱,也是第一個元素的首地址,並不需要取地址符號&但是a應該也得不到正確的答案(輸出1,3,4),只是編譯時能通過

一道c語言指標問題,求大神解答。萬分感謝。

8樓:匿名使用者

#include

int main(int argc, char const *argv)

,,};// 初始

化二維陣列

int i,(*p)[4]=a,*q=a[0];//定義變數i//陣列指標p 初始化為二維陣列首地址

//一級指標q 初始化為二維陣列首元素地址for ( i = 0; i < 3; i++)//for迴圈,迴圈3次

for ( i = 0; i < 3; ++i)return 0;}

9樓:馮小氣氣

如果最後printf是printf("%d ",a[i][i])的話就可以這樣解釋:

1.二維陣列實際是3個一維陣列的結合a[0]= a[1]= a[2]=

2.(*p)[4]: *p指向的是a[0],*(p+1)指向的是a[1],*(p+2)指向的是a[2]

3.*q實際指向也是a[0][0]

4.第一個迴圈體中只有i==0時才有對陣列元素的操作,表示式實際為(*p)[0 + 0 /2] = (*q)+1,即是(*p)[0]=(*q)+1,也就是a[0][0]=a[0][0]+1,即a[0][0]=1+1=2

5.輸出的時候是第i行第i列元素,也就是a[0][0] a[1][1] a[2][2]

10樓:匿名使用者

第二,是否能產生安全感,來自多方面的因素,有主觀的和客觀的。這裡我們就主要談談

主觀方面。要讓對方產生安全感,首先要做的就是讓對方相信自己。讓對方相信自己這是一件不容易的事,你必須在言談舉止方面能夠體現出來,比如:

說話要算數,說得到做得到,做不到就不要亂承諾;經常給她說說心裡話,說說你的想法,經常問候和關心一下她的生活;無論多忙都不要不理她,經常給她一些驚喜;不要再對其它女孩太好,言談和行動上都一樣;願意為他改掉你的不良習慣。

11樓:匿名使用者

你的return四遍完全就是沒有任何用的,你已經定義了全域性變數了,不用return。問題在於你雖然敲擊了回車,但那並不會被輸入。所以你while迴圈可能會一直迴圈下去,直到碰巧碰到一個字元等於'\n'

#include

int l,n,b,o;

int count(char a)

}int main()

;printf("請輸入一句話:");

scanf("%s",str);

count(str);

printf("字母:%d\n數字:%d\n空格:%d\n其他字元:%d\n",l,n,b,o);

return 0;

12樓:匿名使用者

很多事都不是絕對的,不同的人有不同的做法。

13樓:匿名使用者

題目抄的都有問題……最後的 j 是從石頭縫裡蹦出來的?

14樓:韓稚生

1.二維陣列實際是3個一維陣列的結合a[0]= a[1]= a[2]=

2.(*p)[4]: *p指向的是a[0],*(p+1)指向的是a[1],*(p+2)指向的是a[2]

3.*q實際指向也是a[0][0]

4.第一個迴圈體中只有i==0時才有對陣列元素的操作,表示式實際為(*p)[0 + 0 /2] = (*q)+1,即是(*p)[0]=(*q)+1,也就是a[0][0]=a[0][0]+1,即a[0][0]=1+1=2

5.輸出的時候是第i行第i列元素,也就是a[0][0] a[1][1] a[2][2]

關於c語言指標的選擇題,求大神賜教

15樓:匿名使用者

選擇c,ptr是指向函式的指標,該函式返回一個int型資料

16樓:匿名使用者

選c詳解你可以搜尋"函式指標"

關於c語言指標的一道選擇題,高手請進。

17樓:匿名使用者

a選項的錯誤在於沒有&t[3][2]這個地址,因為陣列最大的地址是&t[2][1];

pt是一個指標陣列,即pt[0],pt[1],pt[2]是三個指標(注意區分int (*pt)[3]這種形式),

所以b選項*pt[0]是一個變數,d選項&pt[2]是指標pt[2]的地址而非陣列地址;

c選項pt+1即&pt[1],所以*(pt+1)就是&(*pt[1])也就是pt[1],是一個指向陣列指標,所以應該選c,~~~~

18樓:烏鴉物語

a 答案顯然不對,陣列下標不能達到[3][2]b *pt[0]是pt[0]指向的內容,不是地址c (pt+1)代表指標元素的地址,前面加*代表其內容,即指向內容的地址.故當選.

d 顯然不對

c語言 指標指向陣列的選擇題求解。。

19樓:匿名使用者

關於20 和2002,是你寫反抄了,p[1]=20;p+1的實質是p+1*sizeof(int);如果整形佔4位元組,那麼p+1就該是2004,不是2002.

對於a[i] *(&a[i]) *(p+i) ,只是以中操作而已,看你習慣那種,效果都一樣

a[i]等同於 *(a+i); *(&a[i]) 等同於*(&(*(a+i))),其實就是*(a+i),*(p+i) 不解釋,因為a=p!

主要是對* & 的理解,*是取物件,&取地址,利用首地址和偏移量取物件!濫用無意義,看你懂那個,就用哪種!

20樓:

好像是你寫反了吧,應該

是p[1]的值應該才是20吧.p+1的值是根據你的編譯系統專而定的,如果你在vc下應該屬是4個位元組.tc下就是兩個位元組了.

你所說的a[i] , *(&a[i]) , *(p+i) 所表示的是一樣的,這個主要看自己的理解,自己多看一下書,就明白了

關於c語言程式中指標的一道選擇題

21樓:匿名使用者

首先懷疑你的程式有筆誤,估計你把point( p ) 寫成了 point()了

這樣的話,你的題目就變成這樣了.

point(char *p)

main()

這個函式,其中(char *p)的p為形參(就是形式的引數)。可以把這個函式改為point(char *tmp_p)結果是一樣的,但是更容易理解了。

在main函式中,p=b。而b是一個陣列名,b也是改為point(char *tmp_p)了。

其實呼叫point(tmp_p);的過程是這樣的:

tmp_p = p;

tmp= tmp+3;

這樣可以看出變化的是tmp, p沒有任何變化。所以p這個地址沒有變,所以p這個地址(也就是說陣列b的首地址)裡放的還是『a』。

另外,tmp_p這個變數的生存週期就是point( p )函式的執行週期。關鍵要明白main函式中的p和point(char *p)中的p不是一個指標(變數),是兩個指標(變數)。在呼叫point( p )函式的時候把main中的p賦值給了point(char *p)中的p。

22樓:匿名使用者

point(char *p)

為p指標向下順移定址三位

char b[4]={『a',『b',『c',『d』},*p=b;

此時(*p)的指標值為b[0]指向b陣列頭位置,即當前記憶體狀態(*p)='a',p=b;

point();應該把引數加進去,應該是pint(p);得到結果是p+=3,即&b[0+3]=&b[3];所以當前(*p)=b[3]='d'

所以最終執行結果*p為 'd'

23樓:匿名使用者

point();!!!

確定這條語句對嗎!!!???應該編譯不過吧

C語言程式指標陣列的問題

首先程式存在一個錯誤if max其次 max a,單提陣列名錶示的是陣列第一個元素的地址,所以此處表示指標指向陣列的第一個元素,如果 max的值變了,那麼陣列第一個元素對應的值也相應改變 max a 0 表示指標指向的單元儲存的內容被賦值為a 0 所對應的整數值,max改變並不影響a 0 所儲存的值...

C語言指標陣列與二維陣列行指標小問題

指標陣列 copy 該陣列中存放的全部都是指標,例如 原例子中的char name,這個是一個標準透了的一維陣列,就像是陣列 int a 4 a 1 2 a 2 3 不同的是陣列name存放的是指標,陣列a存放的是數字 name 1 name 2 表示的是把name 2 的指標賦值給name 1 就...

c語言的一道選擇題,一道C語言選擇題 以下正確的程式段是

c語句以分號來表示語句的結束,注意到第2個for迴圈後面的分號了嗎?那表示for迴圈到那裡就結束了,後面的printf語句並不是for迴圈的1部分,所以只是輸出1個星號。因為print這句前有個分號,表示空語句,也就是說,迴圈體內的句子是空,迴圈完之後,又執行了一個列印操作。有點看不清啊,不過應該是...