Joe*_*oey 4 c pointers initialization declaration variable-assignment
试图找出指针初始化和指针分配之间的区别。
C语言
int *p=0;
Run Code Online (Sandbox Code Playgroud)
int *p;
*p=0;
Run Code Online (Sandbox Code Playgroud)
我不知道这两种方法有什么区别。相同?
在功能内
int *p = 0;
Run Code Online (Sandbox Code Playgroud)
等效于:
int *p;
p = 0;
Run Code Online (Sandbox Code Playgroud)
即变量本身被初始化,声明的声明部分被忽略。相对于:
int *p;
*p = 0;
Run Code Online (Sandbox Code Playgroud)
由于分配了未定义指针的目标,因此导致未定义行为。
两者是不同的。这里
int *p=0;
Run Code Online (Sandbox Code Playgroud)
整数指针p被赋值为0,这与
int *p; /* first p is declared : uninitialized */
p = 0; /* then assigned with 0 */
Run Code Online (Sandbox Code Playgroud)
虽然我不喜欢p = 0。这
int *p = NULL;
Run Code Online (Sandbox Code Playgroud)
更好。和这里
int *p;
*p=0; /* p doesn't have any valid address, de-referencing it causes UB */
Run Code Online (Sandbox Code Playgroud)
您尝试分配*p的0是错误的,因为p在这种情况下没有任何有效的地址。它调用未定义的行为。