假设您有一个“void * a”和“void * ptr”,它指向代码中定义的不同地址。然后我想知道这两条线是否相同且功能相同?
*((unsigned **)((char*)ptr+4)) = a;
和
*((unsigned *)((char*)ptr+4)) = a;
第二个抛出一个警告:“赋值从指针生成整数而没有强制转换”
另外,它是否也与上述相同?:
*((char*)ptr+4) = a;
答案 0 :(得分:6)
这些不等同。 #1将(char*)ptr+4
解析为指向无符号(*unsigned
)的指针,而#2将其解析为unsigned
。
a
是一个无效指针,因此它可以转换为*unsigned
,但不会转换为unsigned
(隐式),这就是您收到警告的原因。
#3将相同的内容解析为char
,这也会产生警告。