考虑一个问题:结构体中定义一个长度为 0 的字符数组的作用是什么?
typedef struct{
int a;
char b[0];
}*StruPoint, Stru;
结构体中定义一个长度为 0 的字符数组,这个数组叫 柔性数组。当为这个结构体指针申请内存的时候,除去其他成员变量所占的字节数,剩下的字节数量内存空间分配给该数组。
#include <stdio.h>
#include <stdlib.h>
typedef struct{
int a;
char b[0];
}*StruPoint, Stru;
int main(){
StruPoint ptr = (StruPoint)malloc(19);
//为结构体指针分配19个字节的内存空间,int占4个字节,剩下的 (19-4) 个字节分配给字符数组 b
ptr->a=4;
for(int i = 0; i < 6; i++){
ptr->b[i]='a';
}
ptr->b[6]='\0';
//字符串结束标志,'\0' 的值为0,也可以直接写成 ptr->b[6]=0;
printf("%s\n",ptr->b);
printf("ptr的起始地址为:%d\n",ptr);
printf("成员变量b起始地址为:%d\n",&ptr->b);
free(ptr);
return 0;
}