第一种方式如下:
int *p_number = &number;
第二个类似:
int *p_number;
p_number = &number;
我不明白为什么第一种方式看起来是这样的,因为我知道p_number
是int *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;
这是一样的,但在概念上有点不同。第一行是声明(与前面的示例相同)。第二行是赋值,它是一个语句。