以下是如何工作的?
char *str="string";
printf("str is %s\n",str);
但是下面的给出了段错误
int *i=3;
printf("int is %d\n",*i);
最佳答案
"string"
之类的字符串文字是存储在只读内存位置的 char[7]
。数组名称可以衰减为指向其第一个元素的指针,因此可以将 char*
初始化为这样的文字表达式。
3
之类的整型文字只是一个不存储在任何地方的 int 右值。初始化 int* i = 3
将 i
初始化为指向值为 3
的内存位置。这不太可能是有效位置,这就是为什么取消引用 i
会导致分段违规。
关于c - 在c声明期间初始化指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29184343/