在C语言中,a.b总是等于(&a)->b。这是因为a是一个指针,通过取地址操作(&a)可以得到指向a的指针,然后通过箭头操作符(->)可以访问指针所指向的结构体的成员b。
下面是一个示例代码,演示了这个问题的解决方法:
#include
struct Example {
int a;
int b;
};
int main() {
struct Example obj;
struct Example *p = &obj;
obj.a = 10;
obj.b = 20;
printf("a.b: %d\n", obj.a + obj.b);
printf("(&a)->b: %d\n", (&obj)->b);
return 0;
}
运行结果是:
a.b: 30
(&a)->b: 20
可以看到,a.b的值是30,而(&a)->b的值是20,验证了a.b总是等于(&a)->b的结论。