变长数据结构
来源:互联网 发布:知乎文章怎么收藏 编辑:程序博客网 时间:2024/05/01 05:29
struct dirent{
.......
.......
char a[1];}
在这里char a[1];长度为1,一般认为作为字符数组只能存放'/0',但在这里a[1]声明是
放在结构体的最后,属于变长数据结构的使用,能够方便访问结构体后面的地址,如:
[Copy to clipboard] [ - ]CODE:
.......
.......
char a[1];}
在这里char a[1];长度为1,一般认为作为字符数组只能存放'/0',但在这里a[1]声明是
放在结构体的最后,属于变长数据结构的使用,能够方便访问结构体后面的地址,如:
[Copy to clipboard] [ - ]CODE:
struct dirent
{
int len;
char a[0];
};
struct dirent *fun(char *str, int len)
{
struct dirent* n = (struct dirent*)malloc(len +1 + sizeof(struct dirent));
if (!n)
return NULL;
n->len = len;
memcpy(n->a, str, len);
return n;
}
{
struct dirent* n = (struct dirent*)malloc(len +1 + sizeof(struct dirent));
if (!n)
return NULL;
n->len = len;
memcpy(n->a, str, len);
return n;
}
在使用malloc时扩展size,它正好在struct的尾端(char a[0]或char a[1]必须作为结构体最后成员),
在内存中,扩展的地址跟最后一个成员char p[0]相邻,也就是说通过p也可以实现访问,
用char p[0]比char *p的好处是:
(1) 前者malloc之后不需要给p赋值,因为前者是array.
(2) 前者实现了一个动态数组的功能,如果不需要,他根本就可以不占用任何内存,而后者会占用4个字节.
- 变长数据结构
- 变长数据结构及其应用
- 数据结构的变长字段设计
- 谨慎使用java变长数据结构
- 0元素数组实现变长TLV数据结构
- 0元素数组实现变长TLV数据结构
- 内嵌变长数据结构范例——trbstrmap
- 数据结构(C++实现)——变长顺序表的实现
- 变长参数
- 变长参数表
- 变长数组
- 变长数组
- 变长参数表
- 变长数组
- fgets变长
- 金箍棒变长
- 金箍棒变长
- 金箍棒变长
- json是什么
- 一位真正的好人却永远走了
- Eclipse中CVS界面功能描述(一)
- 哪位大虾帮小弟写一个转换YUV文件分辨率的程序啊!感激不尽!
- Eclipse中CVS界面功能描述 (二)
- 变长数据结构
- Eclipse中CVS界面功能描述 (三)
- 数据库中插入时间
- Spring应用数据主键的生成策略盘点
- KMP算法
- PHP内存缓存技术memcached详解
- AVEVA MARINE 中用PML写管支架程序 三
- ibatis #跟$的区别
- Eclipse中CVS界面功能描述 --特殊情况及其处理(一)