如果我有
typedef struct{
int i;
} typeB;
typeA *p;
那么,指针成员访问和类型转换之间的优先级是什么?
(typeB *)p->i
实际上是((typeB *)p)->i
还是(typeB *)(p->i)
?
如果我有
typedef struct{
int i;
} typeB;
typeA *p;
(typeB *)p->i
实际上是((typeB *)p)->i
还是(typeB *)(p->i)
?
->
的绑定比类型转换更加紧密。typedef void *typeA;
typeB b;
typeA a = &b;
(typeB *)a->i; /* wrong: attempt to dereference a void pointer */
((typeB *)a)->i; /* ok */
()
或[]
这样的一次性表达式运算符中),则通过遵循结合方向来解决。因此,例如以下表达式:7 + (3 - 5 * 2 + 15) - 6
7 + (3 - 10 + 15) - 6 // evaluate * in ()
7 + (-7 + 15) - 6 // evaluate - in () (it is left of the +)
7 + 8 - 6 // evaluate + in ()
15 - 6 // evaluate + (it is left of the -)
9 // evaluate -
Operator Type Operator(s) Associativity
============= =========== =============
Primary () [] . -> expr++ expr-- left-to-right
Expression
Operators
------------- ----------- -------------
Unary * & + - ! ~ ++expr --expr (typecast) sizeof right-to-left
Operators
------------- ----------- -------------
Binary * / % left-to-right
Operators + -
>> <<
< > <= >=
== !=
&
^
|
&&
||
------------- ----------- -------------
Ternary ?: right-to-left
Operator
------------- ----------- -------------
Assignment = += -= *= /= %= >>= <<= &= ^= |= right-to-left
Operators
------------- ----------- -------------
Comma , left-to-right
============= =========== =============
typeA
的相反类型typeB
?那么p
不是一个指针,你怎么将其强制转换为指针类型呢?第三,看起来你正在试图将一个 int 强制转换为(typeB*)
类型。 - greedybuddhatypeA
是一个指针类型,那么这个问题才有意义,但是提问者没有具体说明。 - jxhtypeA
)。有时候,即使一个饥饿的人愿意钓鱼,他仍然需要学会如何钓鱼。 - jxh