我试图查看一段代码,让我感到困惑。
当我们使用以下结构时:
struct sdshdr {
int len;
int free;
char buf[];
};
我们会像这样分配内存:
struct sdshdr *sh;
sh = zmalloc(sizeof(struct sdshdr)+initlen+1);
那么,char[]
&的区别是什么?当在struct中声明了buff时,char*
char[]
是否意味着继续发送地址?
答案 0 :(得分:4)
区别很简单char buf[]
声明了一个灵活的数组; char * buf
声明了一个指针。在许多方面,数组和指针都不一样。例如,您将能够在初始化后直接分配给指针成员,但不能分配给数组成员(您将能够分配给整个结构)。
答案 1 :(得分:1)
struct sdshdr {
int len;
int free;
char buf[];
};
struct shshdr *p = malloc(sizeof(struct shshdr));
+---------+----------+-----------------+
p --> | int len | int free | char[] buf 0..n | can be expanded
+---------+----------+-----------------+
struct sdshdr {
int len;
int free;
char *buf;
};
struct shshdr *p = malloc(sizeof(struct shshdr));
+---------+----------+-----------+
p --> | int len | int free | char* buf | cannot be expanded, fixed size
+---------+----------+-----------+
|
+-----------+
| |
+-----------+
在第一种情况下这是有效的:
struct shshdr *p = malloc(sizeof(struct shshdr)+100); // buf is now 100 bytes
...
struct shshdr *q = malloc(sizeof(struct shshdr)+100);
memcpy( q, p, sizeof(struct shshdr) + 100 );