为什么在C中有两种不同的初始化指针的方法



第一种方式如下:

int *p_number = &number;

第二个类似:

int *p_number;
p_number = &number;

我不明白为什么第一种方式看起来是这样的,因为我知道p_numberint *p_number的地址,我们基本上用&运算符给p_number number的地址。但是为什么我们要用&number初始化*p_number呢?这难道不意味着p_number的指针是数字的地址吗?

我相信让你困惑的是语法

int *p_number = &number;

嗯,你可以把它重写为

int* p_number = &number;

与相同

int *p_number;
p_number = &number;   

第一个步骤实际上是定义和初始化的组合步骤。

只有第一个初始化指针。第二个创建一个未初始化的指针,然后为其赋值。这些指针的净效果是相同的(你有一个指向特定事物的指针变量),编译器生成的代码可能是相同的。

让您感到困惑的是,声明和初始值设定项的语法与赋值的语法有着微妙的不同。特别是,声明中的*表示您正在声明一个指针,而不是对其进行解引用,而在表达式中,*表示正在进行解引用。这种细微的差异被一些人认为是疣,而另一些人则认为是特征。

int *p_number = &number;

它由两部分组成:p_number的声明,后面是它的初始化器= &number(读作"是数字的地址")。

int *p_number;
p_number = &number;

这是一样的,但在概念上有点不同。第一行是声明(与前面的示例相同)。第二行是赋值,它是一个语句。

最新更新