2016-12-14 78 views
0
#include <stdio.h> 

int main (void) 
{ 
    char *str = "Hello"; //defining and initializing the str pointer, which is directing to 'H'. 

    printf("%s\n", str); 
    printf("%p\n", str); 
    return 0; 
} 

結果是:我真的很困惑與理解數組指針用C

Hello 
0000000000404000 

我的問題是從何而來0000000000404000?

+1

輸出中沒有換行符?你應該做'printf(%p \ n「,(void *)str);''而不是'%p''期望一個'void'指針 – yano

+3

這就是字符串碰巧到達地址空間的地方。 – user2357112

+1

你有兩個'printf's,你期望第二個'printf'做什麼? – user3386109

回答

2

格式說明符%p將打印char* str變量中包含的地址,而%s說明符將打印實際字符串文字Hello。內存0x00000000 00404000中的地址是Hello所在的地址。

+0

謝謝!我終於明白了它是什麼。 –

+1

@ChrisLee如果您從答案中瞭解到您應該接受並投票支持 –

0

在Bjarne的Stroustrup的話:

%s的參數被取爲一個字符串(字符指針),以及字符從字符串 印刷直到一個空字符或直到由所指示的字符數精確規格達到;但是,如果精度爲0或缺失,則打印所有空字符;

%p該參數被認爲是一個指針。打印的表示與實施有關;