我在学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/