以下是如何工作的?
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)
字符串文字诸如"string"是一个char[7]存储在只读存储器位置.数组名称可以衰减为指向其第一个元素的指针,因此可以将a初始化char*为这样的文字表达式.
整数文字,例如3只是一个没有存储在任何地方的int rvalue.初始化int* i = 3初始化i为指向具有值的存储器位置3.这不太可能是有效的位置,这就是为什么取消引用i会导致分段违规.