C++ 澄清「;说";指针声明
我一直在研究指针。我发现在声明诸如C++ 澄清「;说";指针声明,c++,c,C++,C,我一直在研究指针。我发现在声明诸如int*x或int*x之类的指针时有一些细微的差别。然而,我一直认为*x是指向内存的实际值。因此,当我阅读int*x=&a时,我将其理解为“将x的指向地址处的值赋给&a”,这显然不是正在发生的事情。变量amem地址被分配给指针x。我该怎么读呢?每当我看到*x,我就认为它是x所指向地址的文本值。这是因为在任何指针声明中,无论它首先用什么值初始化,都会被视为指向的指定mem地址吗 我发现声明int*x或int*x之类的指针有一些细微的区别 这两者完全相同,空间没有区
int*x
或int*x
之类的指针时有一些细微的差别。然而,我一直认为*x
是指向内存的实际值。因此,当我阅读int*x=&a
时,我将其理解为“将x
的指向地址处的值赋给&a
”,这显然不是正在发生的事情。变量a
mem地址被分配给指针x
。我该怎么读呢?每当我看到*x
,我就认为它是x
所指向地址的文本值。这是因为在任何指针声明中,无论它首先用什么值初始化,都会被视为指向的指定mem地址吗
我发现声明int*x或int*x之类的指针有一些细微的区别
这两者完全相同,空间没有区别
指针只是一个存储内存地址的整数,就像指向房子的门号一样
现有变量前面的符号基本上是询问变量内存地址。例如:
int var =8;
int* ptr = &var;
这里,我获取变量var的内存地址,并将其分配给一个名为ptr的新变量
现在我不能百分之百确定你的问题是什么,但希望这能有所帮助
编辑:
我强烈建议大家观看这个视频系列,它非常长,但前两个视频非常好地解释了指针、引用和运算符,如果可以,请记下笔记 将“a”的地址分配给“x”
如果生成一个称为“和”的整数:
#包括
int main(){
整数和=57;
标准::cout
我发现在声明int*x或int*x之类的指针时有一些细微的区别
没有语义上的区别。两者都是相同的,int*x
和int*x
我应该如何阅读[int*x=&a
]
“x
初始化为指向a
”。或者,“…存储a
”的地址。”
此外,您还应该了解到,x
被声明为具有类型int*
,即指向int
的指针。根据上下文,声明的不同方面可能比其他方面更重要。例如,如果我们已经知道a
是一个整数,那么从上下文中可以明显看出,一个变量除非另有说明,否则指向它的e是指向整数的指针。根据上下文,*x
的发音非常不同
int *x;
它的发音是:将x
声明为指向int的指针
y = *x;
这是发音:取x
指向的值,并将其复制到y
拥有这两种完全不同的发音一开始可能看起来很奇怪。但它有更深的含义。C编程语言的发明者希望为上述声明提供一种替代发音
int*x;
的另一种发音是:声明一个变量,使表达式*x
的类型为int
此替代发音规则也适用于非常复杂的类型,例如返回函数的函数,因此值得学习。当您看到以下声明时:
int *x = &a;
您应该将其解释为:
int *x;
x = &a;
声明语法在视觉上令人困惑。我们无意让int*x=&a;
看起来像*x=&a;
。历史上发生的事情是,我们有简单的赋值,比如x=&a;
,我们也有声明。在C风格的声明中,我们展示了如何使用变量:
int x; // I want x to be an int. Therefore, x is an int.
int *x; // I want *x to be an int. Therefore, x is a pointer to an int.
int x(); // I want x() to be an int. Therefore, x is a function that returns an int.
int x[3]; // I want x[i] to be an int. Therefore, x is an array of int.
int *x[3]; // I want *x[i] to be an int. Therefore, x is an array of pointers to int.
接下来,我们希望结合声明和赋值,部分是为了源代码中的简洁性,部分是为了强调这是对象的初始值,即定义对象时的值。为此,声明和赋值被挤在一起,导致:
int *x = &a;
这会导致*x=&a
出现在语句中,但它不是将&a
赋值给*x
。它是在初始化x
,而不是*x
。*x
之所以出现,只是因为它是声明的一部分。我想分离赋值可以减少混淆部分和声明部分,但将它们保留在同一声明中,可能类似于:
int *x : x = &a;
但是,不管我们能做什么,int*x=&a;
就是我们所拥有的。右边的东西被分配给左边的变量。int*x
和int*x
之间没有区别。两者都将x
定义为指向int
的指针。一旦定义了变量,*x
获取x
@user4581301处的值x*y+z
和x*y+z
之间没有区别,但是第二个选项的排版很奇怪。我怀疑您对这些选项的不适是因为我们同时编写int*x=&a;
和int*x;x=&a;
,这意味着我们有时会看到*x=&a
有时是x=&a
。后者是“为x分配某物”的主要代表。出现问题的原因是声明int*x;
和赋值x=&a;
组合在同一类型上。这使语法混乱,导致出现int*x=&a;
,而不是将&a
赋值给*x
。它正在初始化x
,而不是*x
。*x
>之所以出现,是因为它是声明的一部分。谢谢,为了澄清我关于小差异的陈述,我的意思是:使用int*x,y可能会令人困惑,因为这将创建一个指针x
int *x : x = &a;