题外话:
记一次面试总结
struct t
{
char a;
int b;
char a[0];
};
问大小是多少, 为什么, 以及分析可变长数组的作用?
柔性数组的定义
柔性数组是
C99
标准,GUN
的GCC
编译器也允许这种写法, 具体为在一个结构体最后加上一个类似char str[0]
的声明,代表一个可变长数组,str
并不是一个指针, 而是代表str
这个数组在其结构体中的偏移量
#incldue <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct test{
int age;
char sex;
char name[0];// 如果name[0]放在其余的地方会造成变量重叠
}T;
int main()
{
T *tx = (T*)malloc(sizeof(T)+20);
tx->sex = 'x';
tx->age = 30;
memset(tx->name,'\0',20);
memcpy(tx->name,"张三",strlen("张三"));
printf("%s",tx->name); //实现了名字的动态变化
free(tx);
tx = NULL;//如前述所讲避免出现野指针保持良好的代码习惯
}
如果我们把name
放在中间位置, 那么结果可想而知, 因为后续取的空间导致了name
的部分空间和后续变量产生重叠