繁体   English   中英

C ++中的指针声明

[英]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;

它不是*pint *

当我学习指针时,对我而言真正的困惑是星号(*)的双重使用。

就像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* xint *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您只是说xpointer to T类型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM