指標和陣列位址的列印解釋

發布 科技 2024-08-03
6個回答
  1. 匿名使用者2024-01-31

    我用你的程式在我的turbo c中執行它,結果編譯好了,除了礦井的區別,其他英文輸出是一樣的,去掉了main函式前面的&ga符號後,結果還是和之前的一樣。

    首先你要知道,在C語言中,是沒有字串型別的,所以當你用%s輸出的時候,在傳遞值的時候一定要傳遞指標型別,也就是ga,或者&ga[0],這種東西,其實說白了,指標型別,就是 記憶體位址。&取位址是對的,但是ga本來就是ga的指標,他的位址本身就是ga,所以&ga和ga的值是一樣的。

    對於 printf 函式,您的編譯器應該是從右到左的,因此首先執行 ++pa,然後執行 &pa[1],因此輸出為 cde。

    其餘的應該沒什麼,對吧?

  2. 匿名使用者2024-01-30

    這種事情是用兩者來處理的,s 是輸出字串,不管你以後傳遞什麼,它都會是"想"輸出字串,但輸出是否成功取決於引數是否正確。

    要輸出指標的值,可以有多種選擇,10個基本輸出%d,16個基本輸出使用%x;

  3. 匿名使用者2024-01-29

    你使用 %s,當然字串就出來了。

  4. 匿名使用者2024-01-28

    這些概念都離不開RAM,所以先說記憶體。

    記憶就像一棟樓,裡面有很多很多小房間,每個房間都有乙個門牌號,就是位址。 位址的功能是通過這個門牌號找到對應的房間。

    指標是把位址放在多個房間(這個東西很大,需要很多房間才能容納森生),通過指標得到放位址的地方就可以找到目標房間(記憶體)。

    陣列意味著我需要乙個可以放置n個位址或值的連續房間(引用型別儲存位址,值型別直接儲存值),陣列名稱的變數儲存這些連續房間的第乙個彈簧帶的位址。

    純手工打,謝謝。

  5. 匿名使用者2024-01-27

    是因為 (&ga) 等價於使用 ga 作為二維陣列,那麼為什麼 (&ga)+1 為 null?

    GA 等價於乙個字元指標,(&ga) 是乙個指標(位址)指標,不能用 %s 列印,應該是 printf("[%x]", (ga) +1);使用 %x 列印指標值。

    2. 為什麼選擇printf("[%s]", (gb) +1);[ABC] 的列印輸出是什麼?

    GB =&gb 的值,是兩個維度以上陣列的唯一屬性:&gb=gb=*gb。

  6. 匿名使用者2024-01-26

    個人意見:

    在記憶體中,GB 為 GA 後,GB 的值比 GA 小 100(您可以自己嘗試)。

    GA 的型別是一維指標。

    所以 &ga 的型別,二維指標是 char(*)10],所以 &ga+1 不是加 1,而是 10,所以它讀取 ga 後面的資料,所以它是空的。

    GB 是二維指標。

    所以 &gb 的型別是乙個三位數的指標字元 (*10][10],所以 &gb+1 的記憶體位址加到 100,正好指向 gb 後面的 ga 內容,所以輸出就是 ga 的內容。

    您可以將其更改為 this,輸出將與上乙個相同。

相關回答
4個回答2024-08-03

請注意,在 C 中,指標變數上的 +1 不會使其位址值為 +1,而是將該型別的乙個變數的長度相加,例如宣告雙精度 *a; a+n 的值是 a 的位址值加上 n 個雙精度型別變數的位元組長度; >>>More

20個回答2024-08-03

首先我想解釋一下:陣列名稱是乙個指標,它指向儲存陣列元素的一段記憶體,那麼陣列元素是如何引用的,我給大家舉個例子。 例如,a[3],編譯系統將首先找到陣列的第乙個位址,即a,然後根據中的值確定位址偏移量,即3,從而確定要引用的元素是位址a+3所指向的單元的內容。 >>>More

7個回答2024-08-03

a) int *b[ ] 錯誤,指標必須指向受控的已知記憶體位址。 >>>More

13個回答2024-08-03

指標可以在任何情況下使用。

它更適合間接訪問。 >>>More

22個回答2024-08-03

陣列和指標之間的區別:

陣列名稱確實表示指向陣列第乙個位址的指標,但是這個指標很特殊,它的值(指標的值是指標指向的位址)不能被覆蓋,只能覆蓋它指向的內容,換句話說,陣列名稱只能指向陣列的第乙個位址, 如果有陣列 char a;那麼如果 a = a+1; 這是乙個甚至無法編譯的錯誤。 對於普通指標,例如,可能有乙個陣列 char a; 然後定義乙個字元 *p = a; 然後使用 p = p+1 是有效的,這意味著指標 p 指向 &a[1]。 >>>More