-
我用你的程式在我的turbo c中執行它,結果編譯好了,除了礦井的區別,其他英文輸出是一樣的,去掉了main函式前面的&ga符號後,結果還是和之前的一樣。
首先你要知道,在C語言中,是沒有字串型別的,所以當你用%s輸出的時候,在傳遞值的時候一定要傳遞指標型別,也就是ga,或者&ga[0],這種東西,其實說白了,指標型別,就是 記憶體位址。&取位址是對的,但是ga本來就是ga的指標,他的位址本身就是ga,所以&ga和ga的值是一樣的。
對於 printf 函式,您的編譯器應該是從右到左的,因此首先執行 ++pa,然後執行 &pa[1],因此輸出為 cde。
其餘的應該沒什麼,對吧?
-
這種事情是用兩者來處理的,s 是輸出字串,不管你以後傳遞什麼,它都會是"想"輸出字串,但輸出是否成功取決於引數是否正確。
要輸出指標的值,可以有多種選擇,10個基本輸出%d,16個基本輸出使用%x;
-
你使用 %s,當然字串就出來了。
-
這些概念都離不開RAM,所以先說記憶體。
記憶就像一棟樓,裡面有很多很多小房間,每個房間都有乙個門牌號,就是位址。 位址的功能是通過這個門牌號找到對應的房間。
指標是把位址放在多個房間(這個東西很大,需要很多房間才能容納森生),通過指標得到放位址的地方就可以找到目標房間(記憶體)。
陣列意味著我需要乙個可以放置n個位址或值的連續房間(引用型別儲存位址,值型別直接儲存值),陣列名稱的變數儲存這些連續房間的第乙個彈簧帶的位址。
純手工打,謝謝。
-
是因為 (&ga) 等價於使用 ga 作為二維陣列,那麼為什麼 (&ga)+1 為 null?
GA 等價於乙個字元指標,(&ga) 是乙個指標(位址)指標,不能用 %s 列印,應該是 printf("[%x]", (ga) +1);使用 %x 列印指標值。
2. 為什麼選擇printf("[%s]", (gb) +1);[ABC] 的列印輸出是什麼?
GB =&gb 的值,是兩個維度以上陣列的唯一屬性:&gb=gb=*gb。
-
個人意見:
在記憶體中,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,輸出將與上乙個相同。
請注意,在 C 中,指標變數上的 +1 不會使其位址值為 +1,而是將該型別的乙個變數的長度相加,例如宣告雙精度 *a; a+n 的值是 a 的位址值加上 n 個雙精度型別變數的位元組長度; >>>More
首先我想解釋一下:陣列名稱是乙個指標,它指向儲存陣列元素的一段記憶體,那麼陣列元素是如何引用的,我給大家舉個例子。 例如,a[3],編譯系統將首先找到陣列的第乙個位址,即a,然後根據中的值確定位址偏移量,即3,從而確定要引用的元素是位址a+3所指向的單元的內容。 >>>More
陣列和指標之間的區別:
陣列名稱確實表示指向陣列第乙個位址的指標,但是這個指標很特殊,它的值(指標的值是指標指向的位址)不能被覆蓋,只能覆蓋它指向的內容,換句話說,陣列名稱只能指向陣列的第乙個位址, 如果有陣列 char a;那麼如果 a = a+1; 這是乙個甚至無法編譯的錯誤。 對於普通指標,例如,可能有乙個陣列 char a; 然後定義乙個字元 *p = a; 然後使用 p = p+1 是有效的,這意味著指標 p 指向 &a[1]。 >>>More