文章目录
摘要
本文先介绍柔性数组成员(flexible array member)的基本使用,然后介绍其内存结构。最后,补充了一些数组相关的其他概念。
柔性数组成员
基本使用
参考: 【C语言内功修炼】柔性数组的奥秘_数组_Albert Edison_InfoQ写作社区
C99之后,可以使用 flexible array member。它大概长下面这个样子。
struct buffer {
unsigned int len;
char contents[]; // flexible array member
};
- flexible array member 可以认为是零长度数组实现的一个特例(下文会介绍零长度数组)。
sizeof(buffer.contents)
的值为0。 - flexible array member 只能作为结构体的最后一个成员。
下面我们看一个demo,来体验下 flexible array member 带来的便利。
这个demo比较简单。分配一个缓冲区,往里面写内容。这个缓冲区保有缓冲区的大小。
// demo-1.c
#include <stdio.h>
#include <stdlib.h>
struct buffer {
unsigned int len;
char contents[];
};
int main(int argc, char *argv[]) {
unsigned int buf_len = 100;
// construct a buffer
struct buffer *buffer