2013-10-09 67 views

回答

12

它是由標準定義的字符串文字的類型是char 和數組的數組自動衰減到指針,即char*。當使用%s說明符時,您不需要明確地將其作爲參數傳遞給printf

附註:在C++中它是const char*


[1] C99 6.4.5:「字符串文字是封閉在 雙引號的零個或多個多字節字符的序列,如在‘XYZ’... 陣列靜態存儲持續時間和長度的只是 SUF音響cient到包含序列。對於字符串文字,陣列元素具有 類型char

[2] C++ 03 2.1 3.4§1:「普通字符串文字具有類型爲‘n const char’和靜態存儲持續時間」的陣列

+1

我明白了。這只是我知道必須發生的事情,但對於它的實施情況很好奇; typedef是有道理的。 – sherrellbc

+0

我看到你要添加一個來自C標準的引用,但它不是'const char *'C下的。 –

+0

@PaulGriffiths:是的,謝謝。我已經編輯它:) – LihO

4

你的理解是或多或少正確的,雖然該機制是不同的。

除了當它是sizeof或一元&運營商的操作數,或是一個字符串被用來初始化一個聲明另一個數組,類型「的T N元件陣列」的表達將被轉換(」衰減「)轉換爲類型爲」指向T的指針「的表達式,表達式的值將是數組中第一個元素的地址。所有數組類型都是如此,而不僅僅是字符串文字。

表達式"string1"具有類型「8元件陣列char」;在printf中調用它不是sizeof或一元&運算符的操作數,也不用於初始化另一個數組,因此它被隱含地轉換爲類型爲「指向char」的表達式其值爲地址的第一個字符。


1. 7個字母加上0終止符。
2.這是C中的情況;在C++中,字符串文字是const char的數組,因此表達式會衰減爲輸入const char *