我对理解C中的数组指针感到非常困惑

我对理解C中的数组指针感到非常困惑,c,arrays,pointers,C,Arrays,Pointers,我的问题是0000000000 404000从何而来?格式说明符%p将打印char*str变量中包含的地址,而%s说明符将打印实际字符串文本Hello。内存中的地址0x00000000 00404000是Hello所在的位置。格式说明符%p将打印char*str变量中包含的地址,而%s说明符将打印实际字符串文本Hello。内存中的地址0x00000000 00404000是Hello所在的位置。在Bjarne Stroustrup中: %s参数被视为字符串(字符指针)和字符串中的字符 打印到空字

我的问题是0000000000 404000从何而来?

格式说明符
%p
将打印
char*str
变量中包含的地址,而
%s
说明符将打印实际字符串文本
Hello
。内存中的地址
0x00000000 00404000
Hello
所在的位置。

格式说明符
%p
将打印
char*str
变量中包含的地址,而
%s
说明符将打印实际字符串文本
Hello
。内存中的地址
0x00000000 00404000
Hello
所在的位置。

在Bjarne Stroustrup中:

%s
参数被视为字符串(字符指针)和字符串中的字符 打印到空字符或达到精度规格所指示的字符数为止;但是,如果精度为0或缺失,则打印最大为空的所有字符

%p
参数被视为指针。打印的表示取决于实现


用比亚恩·斯特劳斯特鲁普的话说:

%s
参数被视为字符串(字符指针)和字符串中的字符 打印到空字符或达到精度规格所指示的字符数为止;但是,如果精度为0或缺失,则打印最大为空的所有字符

%p
参数被视为指针。打印的表示取决于实现


输出中没有换行符?您应该执行
printf(%p\n“,(void*)str);
相反,
%p
需要一个
void
指针。这正是字符串恰好在地址空间中结束的地方。它完全是任意的,不应该依赖于它。您有两个
printf
指针。您希望第二个
printf
指针做什么?请在问题中解释您期望的输出d insteadIt恰好是
“Hello”
存储在内存中的地址。它必须存储在某个地方-为什么不存储在那里?输出中没有换行符?您应该执行
printf(%p\n“,(void*)str)
相反,
%p
需要一个
void
指针。字符串恰好在地址空间中结束。它完全是任意的,你不应该依赖它。你有两个
printf
s。您希望第二个
printf
做什么?请在问题中解释您希望在标题中的输出恰好是
“Hello”
存储在内存中的地址。它必须存放在某个地方——为什么不放在那里呢?谢谢!!我终于明白了它是什么。@ChrisLee如果你从一个答案中明白了,你应该接受它并投票给它谢谢!!我终于明白了它是什么。@ChrisLee如果你从答案中明白了,你应该接受它并投赞成票
#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;
}
Hello
0000000000404000