我正在研究一下c ++中的指针.我不了解指针的声明方式.本书通过首先在指针变量之前使用星号来初始化指针声明.
int *p;
Run Code Online (Sandbox Code Playgroud)
之后,需要使用"new"运算符初始化堆中的新变量,然后通过解除引用指针来赋值.
p = new int;
*p = 45;
Run Code Online (Sandbox Code Playgroud)
现在书中有一些例子,作者使用以下代码在一个语句中完成所有工作,
int *p = new int;
*p = 45;
Run Code Online (Sandbox Code Playgroud)
这很令人困惑.我们如何为*p分配一个新的int,因为我们必须将值赋给*p,如第一种情况一样?
PS:我在编译器中测试了第二种情况,它就像一个魅力.但我无法理解它.
你在想它是错误的.
将其*视为类型标识符的一部分.
int* p;
Run Code Online (Sandbox Code Playgroud)
它不是*p 一个int *
当我学习指针时,真正困惑的是双重使用星号(*).
就像Sam在他的回答中所说,星号是声明中类型标识符的一部分,如下所示:
int* p;
Run Code Online (Sandbox Code Playgroud)
然后,它的另一个用途是用于解除引用操作符,它允许您访问指针指向的值(在本例中为int).这是代码中的第二行(或第三行):
*p = 45;
Run Code Online (Sandbox Code Playgroud)
因此,为了保持这两个意义,我建议在声明指针时使用上面使用的语法.像其他提到的那样,实际上有三种方法可以做到:
int* p;
int * p;
int *p;
Run Code Online (Sandbox Code Playgroud)
或者介于两者之间的任何空间.但是,我不喜欢中间情况,因为它看起来像是乘法或类似的东西.在一行上声明多个指针时需要第三种情况:
int *p, *q;
Run Code Online (Sandbox Code Playgroud)
因为以下只会创建一个指针,然后是一个int:
int* p, q;
Run Code Online (Sandbox Code Playgroud)
但是不要担心在一行上声明多个指针.如果你不想,你永远不必使用它.