2016-12-14 47 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该参数被认为是一个指针。打印的表示与实施有关;