使用char指针声明的字符串的内存地址

时间:2017-03-22 13:17:46

标签: c pointers

我读到当你使用指针声明字符串时,指针包含字符串文字的内存地址。因此我希望从这段代码中获取内存地址,而是我得到一些随机数。请帮助我理解为什么它不起作用。

int main()
{
    char *hi = "Greeting!";
    printf("%p",hi);
    return(0);
}

如果指针hi包含字符串文字的内存地址,那为什么它不显示内存地址?

3 个答案:

答案 0 :(得分:1)

确实有效。只是你可以认为地址是由C运行时任意选择的。 hi是一个指针,设置为字符串中大写G的地址。您拥有hi之内的所有内存,包括该字符串末尾的nul-terminator。

另外,使用const char *hi = "Greeting!";而不是char *:从hi开始的内存是只读。不要尝试修改字符串:尝试这样做的行为是 undefined

答案 1 :(得分:0)

"随机数"你得到的是内存地址。它们不是常量,因为在每次执行程序时,都会使用其他内存地址。

答案 2 :(得分:0)

指针可以用几种方式表示。格式字符串"%p" "写入定义指针" link的实现定义字符序列。在大多数情况下,它将指向对象的地址解释为一个适当大小的无符号整数,看起来像是一堆随机数"。

用户可读指针表示通常仅用于调试。它允许你比较两个不同的表示(指针是否相同?),在某些情况下,指针之间的相对顺序和距离(指针来自"第一个",它们相隔多远?) 。将指针解释为整数在这种视觉中很有效。

如果您能说明您期望的输出,那将对我们有所帮助。也许你期望指针从零开始?

请注意,虽然某些编译器可能会接受您的示例,但使用const char *会更明智。使用char *将允许您尝试修改字符串文字,这是未定义的行为。