不同结构体的指针作为参数传递到同一个函数,理论上来说属于不同类型,为什么编译器没有报错?
测试环境:visual studio 2013
贴上代码:(C语言)
typedef struct First{
int a;
}A;
typedef struct Second{
int b;
int c;
}B;
void test(B* b){
b->c;
}
main(){
A mA;
mA.a = 1;
test(&mA);
}
代码命名很随意,不要介意。望大神答疑解惑!
不会报错,但是有警告。
C语言并不认为这是错误的做法,它会觉得这是程序员故意这么搞的...因为C语言编译器充分相信程序员...
回到这个问题,
当你将
mA
传递给这个函数时,这个函数就将
mA
当成了B
来处理,b->c
无非就是访问&b + 4B
所在的地址. 而这里的b
又恰好是传入的mA
, 所以就是访问&ma + 4B
的地址.我添加了几个
printf
在你的代码中, 这些printf
会打印出相应的地址:输出结果:
可以看出, 最后访问的地址就是
28ff3c + 4 = 28ff40