【问题标题】:What is the difference between the following code and why this type casting is used以下代码有什么区别以及为什么使用这种类型转换
【发布时间】:2012-03-11 04:45:42
【问题描述】:

我正在写以下大小的宏,我想知道它们的区别。

#define my_sizeof(type) (char*)(&type+1)-(char*)(&type)

#define my_sizeof(type) (void*)(&type+1)-(void*)(&type)

第一个问题是为什么需要类型转换,我知道如果我不进行类型转换,它总是返回 1,我通过运行它来检查它。我想知道意义(我的意思是它告诉编译器做什么)。

第二,

char* 和 void* 有什么区别?

非常感谢。

【问题讨论】:

  • 形式宏参数type 命名错误。应该是Var,因为如果您使用my_sizeof(int),宏将不起作用
  • 你读过一本关于 C 编程的好书吗?指针算法对类型化元素进行运算!
  • 您不能在标准 C 中减去两个 void* 指针。但 gcc 接受它作为扩展!
  • 你能指点我一个很好的链接,告诉我指针算术运算符.....

标签: string pointers compiler-construction casting void-pointers


【解决方案1】:

对于第二个问题:您根本不能这样做,因为没有针对 void 指针的指针算术(或者一般而言,对于指向不完整类型的指针)。

对于第一部分:根据定义,sizeof(char) == 1,因此通过将指针转换为 char 指针,您可以获得以 1 为单位的差异,而不是以 sizeof(type) 为单位的差异——换句话说,您获得的正是sizeof(type) 的值。

【讨论】:

    猜你喜欢
    • 2014-03-21
    • 1970-01-01
    • 1970-01-01
    • 2013-12-03
    • 1970-01-01
    • 2019-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多