Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 使用字符指针声明的字符串的内存地址_C_Pointers - Fatal编程技术网

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

C 使用字符指针声明的字符串的内存地址,c,pointers,C,Pointers,我了解到,当您使用指针声明字符串时,指针包含字符串文本的内存地址。因此,我希望从这段代码中获得内存地址,但我得到了一些随机数。请帮助我理解为什么它不起作用 int main() { char *hi = "Greeting!"; printf("%p",hi); return(0); } 如果指针hi包含字符串文字的内存地址,那么为什么它不显示内存地址?您得到的随机数就是内存地址。它们不是常数,因为每次执行程序时,都会使用其他内存地址。它确实起作用。只是你可以考虑这个地

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

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

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

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

它确实起作用。只是你可以考虑这个地址是由C运行时任意选择的。hi是一个指针,指向字符串中大写字母G的地址。您拥有从hi到该字符串末尾的nul终止符的所有内存


另外,使用const char*hi=Greeting!;而不是char*:从hi开始的内存是只读的。不要试图修改字符串:尝试修改字符串时的行为尚未定义。

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

用户可读的指针表示形式通常仅对调试有用。它允许您比较两种不同的表示法指针是否相同?在某些情况下,指针之间的相对顺序和距离,哪个指针先到,它们之间的距离有多远?。将指针解释为整数在这种情况下效果很好

如果你能澄清你所期望的产量,那将对我们有所帮助。也许你期望指针是零基的


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

但我得到了一些随机数…您的输出是什么?如果不是一组随机数,您希望内存地址是什么样子?char指针指向字符串文字的地址。它不包含address@SeekAddo,它指向字符串,这是表示它包含字符串地址的另一种方式。指向地址的指针就是指向指针的指针。对不起,伙计们,地址是0000000000 404000。因为我没有在里面看到字母a到F,我觉得它不是十六进制。谢谢你的帮助