c 中printf中加 取地卻輸出了結構體中的值

時間 2021-06-30 14:03:47

1樓:Decay

How come an array's address is equal to its value in C?

翻譯下 CB Bailey 的部分回答:

In C, when you use the name of an array in an expression (including passing it to a function), unless it is the operand of the address-of (&) operator or thesizeofoperator, it decays to a pointer to its first element.

在C語言中,當你在乙個表示式中使用陣列名時(包括將它傳遞給乙個函式),除非這個陣列名是取位址 (&) 或者 sizeof 的運算元,否則它將會退化成乙個指向它第乙個元素的指標。

最後舉個例子:

char

str[10]

="hello"

;printf

("%s\n"

,str

);// 這裡str的型別發生了退化,是char*

printf

("%s\n"

,&str);

// 這裡作為取位址的運算元,str沒有退化,型別是char[10],再加上&,

// 於是型別變為char (*) [10],即指向char[10]陣列的指標,

// 這個指標的值和&char[0]是相同的,而型別則在傳給printf的時候被擦去

// 於是兩個printf都會輸出hello.

2樓:有頭腦的白月光

printf格式化輸出就是如此,使用%s ,遇到字串指標型別const char*和char*,輸出字串;遇到其他指標型別,輸出位址。

3樓:筱傑

你使用單個char來表示性別,但是你在輸出時將它當做string來輸出,而C-Style String是以'\0'結尾表示的,顯然單個char不足以在同時儲存資訊的情況下表示字串。

有兩個解決方案,一是在輸出時不要使用%s,而是使用%c。二是性別也用char來表示。

現代C 中取整函式確保準確嗎?

華研 我怎麼莫名想起有一條浮點彙編指令是專門用來取整的呢?你還能不相信硬體 如果你愣是寫了乙個2.9999999999999999999999998進去取整,百分百得到乙個3.浮點數實際上由兩個部分組成 階碼和尾數 兩數各有一位的符號 這裡舉個例子 計算機硬體的實際運算會略有出入,編碼方式不一定相同...

在c中當定義乙個變數並對其取位址的時候電腦發生了什麼?

求知慾旺盛是好事,但以後不懂的東西更多,你根本不需要立馬知道答案,你只需要記下來以後自然就學到了。cs知識是網狀的,你多學才能聯絡起來。總結一下上面的回答,簡單說就是這個問題暫時不用深究,以後去看一下微機原理就明白了。拿我個人來說,高一接觸的C 大三才學微機原理,一點都不影響我中間5年寫程式。人家問...

如何無效能消耗地在C 中實現類似lua的ipairs?

鹹蛋 要是為了編碼方便可以先實現tuple的迭代器然後用巨集封裝下for迴圈比較容易實現 define for i,a,b for auto i a i b i 可以進一步為 for 加上變參控制實現類似包含預設值的巨集手機不方便碼字 stackoverflow和知乎上可以搜到 Star.E 雖然解...