c - 这行代码 "#define LIBINJECTION_SQLI_TOKEN_SIZE sizeof(((stoken_t*)(0))->val)"有什么作用?

标签 c pointers structure sizeof dereference

我特别想知道什么->val

sizeof(((stoken_t*)(0))->val)
还有什么stoken_t*(0)指针做的,特别是什么(0)方法?
我希望我已经足够清楚地表达了我的问题。

最佳答案

这是一种在编译时访问结构成员的方法,无需定义该结构类型的变量。
类型转换 (stoken_t*)0 的值模拟该结构类型的指针,允许您使用 ->运算符,就像您在该类型的指针变量上使用它一样。
添加,如 sizeof是一个编译时运算符,该表达式不会在运行时计算,因此与其他情况不同,这里没有发生空指针取消引用。
它类似于类似的东西

stoken_t * ptr;
sizeof(ptr->val);

关于c - 这行代码 "#define LIBINJECTION_SQLI_TOKEN_SIZE sizeof(((stoken_t*)(0))->val)"有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63774132/

相关文章:

c++ - 数组在通过引用传递给函数之前和之后显示不同的地址

c++ - 指针初始化

pointers - 指针理解

c++ - x86 和 x64 之间浮点运算的差异

c - 结构不存储值和 scanf 失败

c - 段错误 11,尽管分配了足够的内存

c - 结构数组和使用指向函数的指针变量

c++ - C 中的结构封装

c++ - 这在C语言中是什么意思?

c - 以编程方式刻录 CD