C指针:这些具有相同的功能吗?

时间:2011-10-18 06:28:21

标签: c pointers

假设您有一个“void * a”和“void * ptr”,它指向代码中定义的不同地址。然后我想知道这两条线是否相同且功能相同?

    *((unsigned **)((char*)ptr+4)) = a;

    *((unsigned *)((char*)ptr+4)) = a;

第二个抛出一个警告:“赋值从指针生成整数而没有强制转换”

另外,它是否也与上述相同?:

    *((char*)ptr+4) = a;

1 个答案:

答案 0 :(得分:6)

这些不等同。 #1将(char*)ptr+4解析为指向无符号(*unsigned)的指针,而#2将其解析为unsigned

a是一个无效指针,因此它可以转换为*unsigned,但不会转换为unsigned(隐式),这就是您收到警告的原因。

#3将相同的内容解析为char,这也会产生警告。