c语言空指针void*赋值struct,结构强制转换问题

void *data;
struct port_status *temp;

temp = (struct usb_port_status *)data;
printk("port.Status = 0x%x\r\n",temp[0]);

这样写对吗?data赋值temp那不确定,最后还会死机,谢谢

所谓空指针类型,就是说这个指针是无数据类型的指针,空指针data,它起的作用就是存放的是某个内存单元(也就是内存中某个字节,因为内存一般是按字节来编址的)的地址,由于空指针data没有初始化,那么它的指向是不确定的(即它存放的地址值是个未知数,我们不知道是谁的地址,这样的指针我们称为野指针),你把这个不确定的地址强制转化后赋值给结构体指针变量temp,赋值语句本身没有什么语法错误,你把这个地址打印出来也是没有什么问题的,但是如果你对这个地址的内存单元进行赋值操作,修改了这个内存单元的内容,那么可能会造成严重的后果。比如说这个地址所属的内存单元是操作系统的,你修改它的值,就有可能造成死机的后果。追问

void *data 是函数参数,上一个传递的参数定义为:struct port_status *data。
其实是一样的结构体,这样不可以吗?
谢谢

void *data 是函数参数,上一个传递的参数定义为:struct port_status *data。
其实是一样的结构体,这样不可以吗?
谢谢

追答

你的意思是函数的形参是void*类型,实参是结构体指针类型,是吧?这样是可以的,任何类型的指针可以直接赋值给void*类型指针,但是要将void*类型的指针赋值给其他类型的指针,你这里是结构体指针,是需要进行强制指针类型转换的。

温馨提示:答案为网友推荐,仅供参考