void func(u16* x, u16* y);
void main(void){
u32 a,b;
func(&a,&b);
...
...
}
这样的方式很多可能会得到一个错误的a,b值,因为在函数func中,x,y是被当作16位操作的。也就是说a,b的值只有低16位在函数func中被赋值了,高16位维持不变。
void func(u32* x, u32* y);
void main(void)
{
u16 a,b;
func(&a,&b);
...
...
}
程序可能会挂掉。因为a,b地址传入func后是被当做32位数据的地址操作的,操作a地址的时候会操作到4个字节,也就是说栈内a所在地址的前两个字节的值也会被修改。操作b地址的时候,a的值也会被改掉。