大小为一的数组声明

问题描述 投票:0回答:1

遍历 Zend 源代码中的 'zval' 结构,我看到了这样的内容: // zend_types.h

struct _zend_string {
   zend_refcounted_h gc;
   zend_ulong        h;                /* hash value */
   size_t            len;
   char              val[1];
};

这个结构体是用来存储字符串的,但是'char val[1]'看起来很别扭,怎么用呢?

php c zend-framework php-src
1个回答
2
投票

类似的东西用于在编译时访问长度未知的数组。该结构体从

malloc
获取内存,其大小大于该结构体。所以可以使用数组来访问多余的内存。
len
保持在限制范围内很重要。

奇怪的是,它是一个 1 元素数组,0 元素数组对此很常见,直到 c99 中引入了可变长度数组 (

val[]
)。

© www.soinside.com 2019 - 2024. All rights reserved.