如何解决这行代码“ #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)
的指针,则0
是stoken_t
的类型((stoken_t*)(0)->val)
和val
的成员返回此类型在内存中占用的字节数。简而言之,该表达式可在编译时找到结构成员的大小,而无需该结构类型的实例。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。