📜  是否 int *p=&x;与这两个语句相同(int *p; p=&x; )? (1)

📅  最后修改于: 2023-12-03 15:10:29.918000             🧑  作者: Mango

介绍

在 C 语言中,我们可以使用指针来间接操作变量的值。指针是指向另一个变量的变量,可以通过指针来操作另一个变量的值。在指针的声明和初始化中,有两种不同的方式:

int *p = &x;
int *p;
p = &x;

上述两种方式都可以将指针 p 指向变量 x,并且它们的结果是相同的。但是,它们之间并不完全相同,下面来详细分析一下。

区别
  1. 声明和初始化一步完成 VS 声明和初始化分两步完成

第一种方式是将指针的声明和初始化放在了一起,可以一步完成。这样做的好处是代码更加简洁,易于阅读和理解。而第二种方式将声明和初始化分成两个步骤,使得代码看起来更加冗长,但它能让程序员更加灵活地操作指针。

  1. 系统默认初始值 VS 需要手动初始化

在第一种方式中,指针在声明时会被系统默认初始化为 NULL,也就是空指针。因此,如果你不对指针进行赋值,它将指向空地址。而在第二种方式中,指针不会被默认初始化,必须手动进行初始化才能使用。

代码片段

下面是两种方式的代码片段:

// 第一种方式:声明和初始化一步完成
int x = 10;
int *p = &x;
// 第二种方式:声明和初始化分两步完成
int x = 10;
int *p;     // 声明指针
p = &x;     // 初始化指针

无论采用哪种方式,都能实现指针与变量的关联。但是需要注意的是,指针的初值不被初始化时,指向的地址是随机的,不稳定,很容易导致程序崩溃,因此建议在使用指针时,始终将其初始化为 NULL 或者具体的地址。