C+中的指针声明+; 我正在学习C++中的指针。我无法理解指针的声明方式。本书首先在指针变量之前使用星号来初始化指针声明 int *p;
之后,需要使用“new”操作符初始化堆中的新变量,然后通过取消引用指针来赋值C+中的指针声明+; 我正在学习C++中的指针。我无法理解指针的声明方式。本书首先在指针变量之前使用星号来初始化指针声明 int *p;,c++,pointers,C++,Pointers,之后,需要使用“new”操作符初始化堆中的新变量,然后通过取消引用指针来赋值 p = new int; *p = 45; 书中有一些例子,作者使用以下代码在一条语句中完成所有工作 int *p = new int; *p = 45; 这很令人困惑。我们如何将新的int赋值给*p,因为我们必须将值赋值给*p,就像第一种情况一样 附言:我已经在编译器中测试了第二个用例,它工作起来很有魅力。但是我无法控制它。你想得不对 将*视为类型标识符的一部分 int* p; 这不是一个*p而是一个int*你
p = new int;
*p = 45;
书中有一些例子,作者使用以下代码在一条语句中完成所有工作
int *p = new int;
*p = 45;
这很令人困惑。我们如何将新的int赋值给*p,因为我们必须将值赋值给*p,就像第一种情况一样
附言:我已经在编译器中测试了第二个用例,它工作起来很有魅力。但是我无法控制它。你想得不对 将
*
视为类型标识符的一部分
int* p;
这不是一个
*p
而是一个int*
你想得不对
将*
视为类型标识符的一部分
int* p;
它不是
*p
而是int*
就编译器而言,以下声明是相同的:
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
,那就不重要了。唉,甚至int*x
都是有效的
有人说你应该更喜欢符号T*x
,因为你可以把它读成*x是一个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
属于指向T
的类型,就编译器而言,以下声明是相同的:
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
,那就不重要了。唉,甚至int*x
都是有效的
有人说你应该更喜欢符号T*x
,因为你可以把它读成*x是一个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
属于指向T的指针类型当我学习指针时,真正让我困惑的是重复使用星号(*)
正如Sam I am在其回答中所说,星号是声明中类型标识符的一部分,如下所示:
int* p;
然后,它的另一个用途是解引用操作符,它允许您访问指针指向的值(在本例中是指向int)。这是代码中的第二行(或第三行):
*p = 45;
因此,为了将这两种含义分开,我建议在声明指针时使用上面使用的语法。与前面提到的其他方法一样,实际上有三种方法可以做到这一点:
int* p;
int * p;
int *p;
或者中间有任意数量的空格。然而,我不喜欢中间的情况,因为它看起来有点像乘法之类的。在一行上声明多个指针时需要第三种情况:
int *p, *q;
因为下面只会创建一个指针,然后创建一个int:
int* p, q;
但是不要担心在一行上声明多个指针。如果你不想使用它,你永远不必真正使用它。当我学习指针时,真正让我困惑的是双倍使用星号(*)
正如Sam I am在其回答中所说,星号是声明中类型标识符的一部分,如下所示:
int* p;
然后,它的另一个用途是解引用操作符,它允许您访问指针指向的值(在本例中是指向int)。这是代码中的第二行(或第三行):
*p = 45;
因此,为了将这两种含义分开,我建议在声明指针时使用上面使用的语法。与前面提到的其他方法一样,实际上有三种方法可以做到这一点:
int* p;
int * p;
int *p;
或者中间有任意数量的空格。然而,我不喜欢中间的情况,因为它看起来有点像乘法之类的。在一行上声明多个指针时需要第三种情况:
int *p, *q;
因为下面只会创建一个指针,然后创建一个int:
int* p, q;
但是不要担心在一行上声明多个指针。如果你不想使用它,你永远不必真正使用它。这与inti=5代码>,除了int
,您有一个int*
,而不是5,您分配内存并初始化点