gpt4 book ai didi

c++ - 指针:初始化与声明

转载 作者:IT老高 更新时间:2023-10-28 22:08:42 25 4
gpt4 key购买 nike

我是 C++ 菜鸟,我很确定这是一个愚蠢的问题,但我只是不太明白为什么以下代码会出现(不出现)错误:

#include <iostream>
using namespace std;


int main()
{
int a,*test;

*test = &a; // this error is clear to me, since an address cannot be
// asigned to an integer


*(test = &a); // this works, which is also clear
return 0;
}

但为什么这也行得通?

#include <iostream>
using namespace std;

int main()
{
int a, *test= &a; // Why no error here?, is this to be read as:
// *(test=&a),too? If this is the case, why is the
// priority of * here lower than in the code above?

return 0;
}

最佳答案

这两行的根本区别

*test= &a; // 1
int a, *test= &a; // 2

第一个是表达式,由已知优先级规则的运算符调用组成:

       operator=
/\
/ \
/ \
operator* operator&
| |
test a

而第二个是变量声明和初始化,相当于声明int a;后面跟:

   int*     test    =  &a
// ^^ ^^ ^^
//type variable expression giving
// name initial value

第二行甚至没有使用 operator*operator=

标记 *=(以及 & 以及 ,)的含义取决于它们出现的上下文:在表达式内部,它们代表相应的运算符,但在声明中 * 通常作为类型的一部分出现(意思是“指向” ) 和 = 用于标记(复制)初始化表达式的开始(, 分隔多个声明,& 作为“引用”是也是类型的一部分)。

关于c++ - 指针:初始化与声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44602499/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com