遍历Zend源代码中的“zval”结构,我看到了以下内容://zend_types.h
struct _zend_string { zend_refcounted_h gc; zend_ulong h; /* hash value */ size_t len; char val[1]; };
此结构用于存储字符串,但'char瓦尔[1] '看起来很尴尬如何使用?
dfddblmv1#
类似这样的东西用于给予在编译时访问长度未知的数组的权限。结构体从malloc获取内存,内存大小大于结构体。所以数组可以用来访问多余的内存。len必须保持在极限范围内。奇怪的是,它是一个1元素数组,0元素数组在c99中引入可变长度数组(val[])之前很常见。
malloc
len
val[]
1条答案
按热度按时间dfddblmv1#
类似这样的东西用于给予在编译时访问长度未知的数组的权限。结构体从
malloc
获取内存,内存大小大于结构体。所以数组可以用来访问多余的内存。len
必须保持在极限范围内。奇怪的是,它是一个1元素数组,0元素数组在c99中引入可变长度数组(
val[]
)之前很常见。