c++ *优先级高还是()优先级高
时间: 2023-11-26 10:03:03 浏览: 31
在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)`表示先执行函数再取值。