2017-10-17 48 views
0

我很困惑C如何在內存中存儲數組。從下面的例子來看,str1的地址等於它的值。惠特,我正在解釋的結果爲:內存地址& str1包含地址本身的值。但事實並非如此,因爲從其他例子中我看到str1的地址包含字符串的第一個值,在本例中爲「H」。陣列名稱的C內存位置

所以我的問題可以是:str1的地址存儲在哪裏?

#include <stdio.h> 

int main(int argc, char const *argv[]) { 
    char str1[] = "Hello World"; 
    printf("%d %d %c\n",&str1,str1,str1[0]); 
    return 0; 
} 
+0

當你說「str1的地址」時,你到底意味着什麼? –

+0

'str1'是一個數組,因此在這裏使用該名稱會導致其地址。 '&str1'的計算結果與'str1'的值相同。 'str1 [0]'是它的第一個元素的值。 –

+0

@PaulOgilvie'&str1'和'str1'的計算結果相同但值不同。 –

回答

1

首先,您必須使用%p格式說明符來打印地址(指針)。

也就是說,引用C11,章§6.3.2.1

除了當它是sizeof操作者的操作數時,操作者_Alignof或 一元&操作者,或者是字面使用串要初始化一個數組,具有類型爲''的類型爲'''的數組的表達式將被轉換爲類型爲''的指針的類型爲''的表達式,該指針指向 指向數組對象的初始元素,並且不是左值。

所以,基本上,

printf("%p", str1); 
    printf("%p", &str1[0]); 

是相同的。

現在,來到&str1的部分,那麼,類型是不同的。它是char [<array size>]