昨天给同事一起玩耍同事给我絀了一道代码题目,是关于typeof struct的感觉挺好玩的,在此分享给大家顺便巩固下自己对typeof struct知识点的总结。如有不对请给予指出,共同进步
那么,你说运行该代码chrome调试器会打印什么呢?
为什么会出现这个结果呢
首先分析上图中的两个null
什么是预解析(hoisting)呢?
就是在JavaScript中你可鉯在函数的任何位置声明多个var语句,它们就像在函数的顶部声明一样发挥作用且会给var声明的变量赋予一个undefined的初始值。这种行为我们称之為预解析(hoisting)
再来看看,为什么typeof struct f会是undefined呢f都没定义,不应该会报错吗
是的,倘若我们去使用一个未定义的变量浏览器是会报错的。
但是当用typeof struct去判断一个未定义的变量,将返回undefined
那typeof struct判断值类型时,是个怎么机制呢总结如下:
1、 对于数字类型的值,typeof struct会返回number注意:NaN也是一個数字类型,因为它在JavaScript中代表的是特殊非数字值
2、 对于字符串类型的值,typeof struct会返回string
6、 如果运算数没有定义(不存在或未赋值),将会返囙undefined
问题:如何通过结构中的某个变量获取结构本身的指针?
它的作用显而易见,那就是根据一个结构体变量中的一个域成员变量的指针来获取指向整个结构体变量的指針比如,有一个结构体变量其定义如下:
同时,在另一个地方获得了变量demo中的某一个域成员变量的指针,比如:
此时如果需要获取指向整个结构体变量的指针,而不仅仅只是其某一个域成员变量的指针我们就可以这么做:
其中,typeof struct是GNU C对标准C的扩展它的作用是根据變量获取变量的类型。因此上述代码中的第2行的作用是首先使用typeof struct获取结构体域变量member3的类型为 type3,然后定义了一个type3指针类型的临时变量__mptr并將实际结构体变量中的域变量的指针memp的值赋给临时变量__mptr。
则在执行了上述代码的第2行之后__mptr的值即为0xA010。
同样我们将上述的offsetof调用展开,即為:
可见offsetof的实现原理就是取结构体中的域成员相对于地址0的偏移地址,也就是域成员变量相对于结构体变量首地址的偏移
由此,container_of实现叻根据一个结构体变量中的一个域成员变量的指针来获取指向整个结构体变量的指针的功能
java 中的 null:既是对象又不是对象,史称「薛定谔的对象」
在 java 的最初版本中,使用的 32 位系统为了性能考虑使用低位存储了变量的类型信息:
有 2 个值比较特殊:
null:对应机器碼的 NULL指针,一般是全零
在第一版的 java 实现中,判断类型的代码是这么写的:
(2):如果不是 undefined判断是否为对象
(3):如果不是对象,判断昰否为数字
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。