[英]Pointer Declaration in C++
我正在努力学习一些有关c ++中的指针的知识。 我不了解指针的声明方式。 本书通过在指针变量之前先使用星号来初始化指针声明。
int *p;
之后,需要使用“ new”运算符在堆中初始化新变量,然后通过取消引用指针来赋值。
p = new int;
*p = 45;
书中有一些示例,其中作者使用以下代码在单个语句中完成了所有工作,
int *p = new int;
*p = 45;
这很令人困惑。 与第一种情况一样,由于必须将值分配给* p,我们如何为* p分配新的int?
PS:我已经在编译器中测试了第二种情况,它的工作原理很吸引人。 但是我无法解决这个问题。
您正在以错误的方式思考。
将*
视为类型标识符的一部分。
int* p;
它不是*p
是int *
当我学习指针时,对我而言真正的困惑是星号(*)的双重使用。
就像Sam在回答中所说的那样,星号是声明中类型标识符的一部分,如下所示:
int* p;
然后,它的另一个用途是用于取消引用运算符,它使您可以访问指针指向的值(在这种情况下为int)。 这是代码中的第二(或第三)行:
*p = 45;
因此,为了自己区分这两个含义,建议在声明指针时使用上面使用的语法。 像其他提到的一样,实际上可以通过三种方式完成此操作:
int* p;
int * p;
int *p;
或两者之间的任何数量的空格。 但是,我不喜欢这种中间情况,因为它看起来像一个乘法或某种东西。 在一行上声明多个指针时,需要第三种情况:
int *p, *q;
因为以下内容只会创建一个指针,然后再创建一个int:
int* p, q;
但是不必担心在一行上声明多个指针。 如果您不想,则不必真正使用它。
就编译器而言,以下声明是相同的:
int* x; // alternative [1]
int *x; // alternative [2]
[1]
或[2]
是样式,偏好和正在进行的宗教战争的主题。
当您说int* x
或int *x
,您已声明变量x
将存储一个指向整数的指针。 您可以稍后传递该指针,如下所示:
int* x;
x = new int;
或立即,例如:
int* x = new int;
注意,无论哪种情况,如果我都写int *x
都没关系。 las,即使int * x
也有效。
有人说您应该首选符号T *x
因为您可以将其读为*x is a T
(而不是将其读为( x
是指向T
的指针))。 其他人更喜欢使用符号T* x
因为它似乎强调了x属于T*
类型的事实(换句话说,是指向T
指针)。
有人会说符号T* x
可以帮助您避免以下错误:
T *x, y, z; // (x is a pointer to T, but y and z are NOT pointers to T; confusing)
相反
T* x, y, z; // (x, y, and z are all pointers to T.
因此,选择所需的符号。 但是,就您的问题而言,仍然要考虑以下问题:当您说T* x
您只是说x
是pointer to T
类型。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.