我在学C,我碰到了指针。
尽管我从本教程中学到的东西比从教科书中学到的还多,但我仍然对char指针感到好奇。
如果我把这个程序

#include <stdio.h>

int main()
{
    char *ptr_str;

    ptr_str = "Hello World";

    printf(ptr_str);

    return 0;

}

结果是
Hello World

我不明白为什么编译时没有错误,因为指针ptr_str直接指向文本,而不是文本的第一个字符。我以为只有这样才行
#include <stdio.h>

int main()
{
    char *ptr_str;
    char var_str[] = "Hello World";

    ptr_str = var_str;

    printf(ptr_str);

    return 0;

}

在第一个例子中,我是如何直接指向文本的?

最佳答案

您的代码可以工作,因为字符串文本实际上是静态数组。

ptr_str = "Hello World";

被编译器当作
static char __tmp_0[] = {'H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd', '\0' };
ptr_str = __tmp_0;

(除了试图修改字符串文本的内容有未定义的行为)。
您甚至可以将sizeof应用于字符串文本,您将得到数组的大小:sizeof "Hello"例如是6。

关于c - 不应该直接指向C中的文本吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48892704/

10-11 22:40
查看更多