标签:php
typedef union _zvalue_value {
longlval; /* long value */doubledval; /* double value */struct { char *val; intlen; } str; HashTable *ht; /* hash table value */zend_object_valueobj; } zvalue_value;//联合体仅仅代表一种可以解释为多种实际类型的抽象类型,但是每次必须解释为一种实际的类型//a union is simply a single type that can be interpreted in different ways depending on how its accessed.
1、union中可以定义多个成员,union的大小由最大的成员的大小决定。
2、union成员共享同一块大小的内存,一次只能使用其中的一个成员。
3、对某一个成员赋值,会覆盖其他成员的值(也不奇怪,因为他们共享一块内存。但前提是成员所占字节数相同,当成员所占字节数不同时只会覆盖相应字节上的值,比如对char成员赋值就不会把整个int成员覆盖掉,因为char只占一个字节,而int占四个字节)4、联合体union的存放顺序是所有成员都从低地址开始存放的。
//最大为96bits,所以联合体的内存大小为96bits从上面可以看出,_zvalue_value只能直接表示五种类型,其他的类型需要进行转换。BOOL,NULL,RESOURCE都存储为long(int)。
typedef struct _zval_structzval;
struct_zval_struct { /* Variable information */
zvalue_value value; /* value */
zend_uintrefcount__gc; //引用计数 zend_uchartype; /* active type */
zend_ucharis_ref__gc; //标识是否是引用 };
获取zval结构的类型
Z_TYPE(zval)
如:获取zval结构的值Z_LVAL(zval) //获取整型值Z_DVAL(zval) //获取浮点数
#define Z_LVAL(zval) (zval).value.lval
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:php
原文地址:http://blog.csdn.net/td901105td/article/details/46712629