这行代码“ #define LIBINJECTION_SQLI_TOKEN_SIZE sizeofstoken_t *0-> val”的作用是什么?

问题描述

我特别想知道->val

中的作用
sizeof(((stoken_t*)(0))->val)

以及stoken_t*(0)指针的作用,特别是(0)的含义是什么?

我希望我已经清楚地提出了我的问题。

解决方法

这是一种在编译时访问结构成员的方法,而无需定义该结构类型的变量。

(stoken_t*)强制转换为值0会模拟该结构类型的指针,从而允许您在其上使用->运算符,就像在该类型的指针变量。

要补充一点,由于sizeof是编译时运算符,因此不会在运行时对表达式求值,因此与其他情况不同,这里没有发生空指针取消引用的情况。

类似于类似的东西

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

详细信息:

foo({arg1: 'arg'}) 只需将Argument of type '{ arg1: number; }' is not assignable to parameter of type 'FooArgs'. Property 'arg2' is missing in type '{ arg1: number; }' but required in type 'FooArgs'. (可以是任意数字文字)转换为指向(stoken_t*)(0)的指针,则0stoken_t的类型((stoken_t*)(0)->val)val的成员返回此类型在内存中占用的字节数。简而言之,该表达式可在编译时找到结构成员的大小,而无需该结构类型的实例。