關於陣列指標問題?請高手幫忙

2022-03-09 07:41:01 字數 908 閱讀 9230

1樓:

你看下記憶體及知道了

p實際上是一個char型別的二重指標

*p就是p[0]的地址

單獨運時p[0]地址是0042e02c(十六進位制)而你按照%c輸出就是隻輸出一個位元組,所以輸出「 ,」

因為「,」的ascii碼就是2c,十進位制是44至於為什麼是輸出最後一個位元組,因為大部分系統是小端機,記憶體表示的高地址位元組在後面;

而一起執行時

地址是0042e030,所以會輸出 0.道理和前面一樣你可以改成%d,輸出的就是完整的地址

至於兩次執行地址不一樣,那不是我說了算,編譯器說了算。

而且不明白你為什麼要輸出*p要輸出字元a的話輸出*p[0]及可以了啊。

2樓:

在我機器上,兩個printf一起執行結果如下:

cdefg請按任意鍵繼續. . .

來分析一下,printf("%c",*p);按%c輸出*p的值,*p其實是"abcdefg"的地址,%c輸出這個地址的一個位元組,因此為。

printf("%s",*(p+1)+2);按%s輸出*(p+1)+2的值,*(p+1)+2指向"abcdefg"的第3個字元「c」,因此輸出cdefg。

3樓:匿名使用者

char *p[2]是指標陣列,p是指標陣列名,指標陣列名是指向指標的指標,它的值就是元素p[0]的地址,*p就是p[0]中的內容,而p[0]是一個指向字元的指標變數,它的值是地址,就是記憶體為字串abcdefg分配的記憶體段的首地址,您用%c的格式輸出此地址,可能是此地址值正好是','的ascii碼值,故輸出',',至於兩個printf一起執行會輸出'0',可能是您改變了程式內容,重新進行編譯連線,所以系統又給指標陣列分配了新的記憶體段,可能新的記憶體段p[0]的值正好是『0』的ascii碼,就輸出了'0',希望以上分析能夠幫到您。

c 指標陣列問題,C 中關於指標陣列的問題。

是錯誤的。char cchar count 宣告瞭cchar是有count個元素的陣列,每個元素都是指向char型變數的指標。但cin cchar i 卻試圖給cchar的第二個元素 指標 賦一個鍵盤值 這裡指標還沒有確定指向,是隨機的,它隨機地指向了不能寫入的地方,就要出錯。這裡應該先給指標陣列賦...

c語言中陣列指標和結構體指標問題

樓上都說的很不錯。針對補充,我說兩句 結構體名字不是指標,結構體陣列的名字才是指標 就好像int x x不是指標,int x 2 x是常量指標 同樣 struct aa aa x x不是指標,aa x 3 x是常量指標 對於陣列int a 2 我們通常把a看成是指標 但實際上,這個指標並不存在的,a...

sql語句問題,請高手幫忙

select 學生.學號,姓名 from 學生,選課 選課1 where 學生.學號 選課1.學號 and not exists select from 選課 選課2 where 選課2.學號 s001 and not exists select from 選課 選課3 where 選課2.課程號 ...