![](/img/trans.png)
[英]Where are place address of globals, static and string literals by a compiler C?
[英]Address Of String Literals in C
我已經讀過字符串文字的類型是char [n + 1],其中n是長度。字符串文字的存儲是一個實現問題。但是仍然必須在瞬間是唯一的。
printf
("%u\t %s\t %d\t %c\t %f\t %e\t %x\t %p\t",
&"XY",&"XY",&"XY",&"XY",&"XY",&"XY",&"XY",&"XY");
此代碼的輸出是
4206628 XY 4206628 $ 0.000000 1.800980e-307 7ffde000 00000032
為什么%f
給出零, %s
給出XY( &
無效),而%p
給出完全不同的值?
您不能傳遞錯誤類型的值(該類型與格式說明符所期望的類型不符),並且無法獲得未定義的行為。
例如,它很可能是一個double
這正是%f
預計比指針更大 (這是你實際上在做什么)的傳球,從而導致傳遞的值,並通過消耗值之間的不匹配printf()
,或多或少導致混亂。
為什么
%f
給零?
因為%f
希望獲得double
而不是double
,所以這會導致未定義的行為。
%s
給出XY
(“&
無效)
可能是因為arr
數組: arr
和&arr
具有相同的值。 但是,類型不同,這意味着您要將意外類型傳遞給printf
,這也是未定義的行為。
和
%p
給出了完全不同的值?
那就是您要尋找的指針值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.