“ int * p = 0;”和有什么区别?和“ int * p; * p = 0;”

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)

我不知道这两种方法有什么区别。相同?

Tom*_*zes 7

在功能内

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)

由于分配了未定义指针的目标,因此导致未定义行为。


Ach*_*hal 1

两者是不同的。这里

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)

您尝试分配*p0是错误的,因为p在这种情况下没有任何有效的地址。它调用未定义的行为