案例 1:
#include <stdio.h>
int main()
{
int a = 5,*p;
*p = &a;
printf("%d",*p);
}
上面提到的程序给出了段错误问题。但在案例 2 中它工作正常。 案例 2:
#include <stdio.h>
int main()
{
int a = 5,*p = &a;
printf("%d",*p);
}
谁能解释一下这个问题。谢谢。
最佳答案
*p = &a;
取消引用 p
并将 &a
分配给 p
指向 的内存位置。该指针未初始化,因此取消引用它会产生未定义的行为(因此出现段错误)。
int a = 5,*p = &a;
定义 a
和 p
,其中星号并不表示取消引用,而是将通常的 int
定义与 int* 区分开来
指针定义。该行相当于
int a = 5;
int* p = &a;
关于c指针段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33848298/