C语言中取地址&和->谁优先级更高
时间: 2024-09-23 20:01:00 浏览: 117
关于==和&优先级问题
在C语言中,当涉及到成员访问运算符`->`和取地址运算符`&`时,它们并不具备直接的优先级比较。这是因为它们代表了完全不同的操作。
`&`用于获取变量的内存地址,它是位运算符,与其他算术和逻辑运算符具有相同的优先级,相当于在表达式中具有最低优先级。例如:
```c
int x = 5;
int *p = &x; // 取x的地址
```
而`->`则是结构体或类指针成员访问运算符,它是在表达式中有特定含义的操作符,用于访问指针指向的对象的成员。它的优先级通常高于`&`,但在标准C语言规范中并没有明确指定。
如果你想要表示对某个指针成员的地址,你需要先取到指针再应用`&`,如:
```c
struct MyStruct {
int a;
};
struct MyStruct *s = malloc(sizeof(struct MyStruct));
int *pa = &s->a; // 首先通过->访问a,然后取地址
```
总之,在实际编程中,`->`主要用于访问属性,`&`用于取得地址,两者在大多数情况下不会混淆,因为它们的用途不同。如果需要同时使用,`&`会出现在`(*pointer)`之后,因为`*`具有比`->`更高的优先级。
阅读全文