c++中=与*的优先级
时间: 2024-03-09 12:49:48 浏览: 44
在C++中,*(解引用)的优先级高于=(赋值),这意味着如果一个表达式中同时使用了*和=,那么*会先被执行。例如,考虑下面的代码:
```
int x = 10;
int *ptr = &x;
*ptr = 20;
```
在这个例子中,*ptr是指针ptr所指向的变量(即x)的值。最后一行的*ptr = 20将20赋值给x,而不是将20赋值给ptr指向的地址。
相关问题
c++ *优先级高还是()优先级高
在C++中,`*`和`()`都是运算符,它们都有自己的优先级和结合性。
对于`*`和`()`,它们的优先级是不同的,`*`的优先级高于`()`。
因此,当一个表达式中同时包含`*`和`()`时,`*`的运算会先执行。
例如:
```c++
int *p[3]; // 定义一个指针数组
int (*p1)[3]; // 定义一个指向长度为3的int数组的指针
int* p2[3]; // 定义一个指针数组
int* p3(int); // 定义一个返回指针的函数
int (*p4)(int); // 定义一个返回指向int的指针的函数
int main() {
int a = 1, b = 2, c = 3;
p[0] = &a; // 对指针数组进行赋值
p[1] = &b;
p[2] = &c;
int arr[3] = {4, 5, 6};
p1 = &arr; // 对指针进行赋值
int x = 7, y = 8, z = 9;
p2[0] = &x; // 对指针数组进行赋值
p2[1] = &y;
p2[2] = &z;
int* p3(int); // 声明一个返回指针的函数
int (*p4)(int); // 声明一个返回指向int的指针的函数
return 0;
}
```
在以上代码中,我们定义了指针数组`p`,`*p`中的`*`表示指针类型,而不是运算符,因此`()`的优先级高于`*`,所以`(*p)[0]`表示取数组第一个元素的值,而不是先取指针再取值。
而对于指针`p1`,`*p1`中的`*`是运算符,因此`*p1[0]`表示先取指针再取值。
对于指针数组`p2`,`*p2`中的`*`表示指针类型,因此`*p2[0]`表示取数组第一个元素的值,而不是先取指针再取值。
最后,对于函数指针`p4`,`*p4`中的`*`是运算符,因此`*p4(1)`表示先执行函数再取值。
C++中&& 和 ==优先级
在 C++ 中,&& 是逻辑与运算符,而 == 是等于运算符。&& 的优先级比 == 高,因此在表达式中同时存在 && 和 == 运算符时,先计算 && 运算符,再计算 == 运算符。
例如,在下面的表达式中:
```
a && b == c
```
先计算 && 运算符,再计算 == 运算符。这个表达式相当于:
```
a && (b == c)
```
如果想改变运算的优先级,可以使用括号来明确表达式的计算顺序。在上面的例子中,如果想先计算 b == c,可以使用括号:
```
(a && b) == c
```