在c中声明期间初始化指针

Kar*_*ick 2 c

以下是如何工作的?

char *str="string";
printf("str is %s\n",str);
Run Code Online (Sandbox Code Playgroud)

但是下面的一个给出了分段错误

int *i=3;
printf("int is %d\n",*i);
Run Code Online (Sandbox Code Playgroud)

jua*_*nza 7

字符串文字诸如"string"是一个char[7]存储在只读存储器位置.数组名称可以衰减为指向其第一个元素的指针,因此可以将a初始化char*为这样的文字表达式.

整数文字,例如3只是一个没有存储在任何地方的int rvalue.初始化int* i = 3初始化i为指向具有值的存储器位置3.这不太可能是有效的位置,这就是为什么取消引用i会导致分段违规.