char []和amp;之间有什么区别? char *在struct里面声明?

时间:2013-09-28 04:11:54

标签: c

我试图查看一段代码,让我感到困惑。

当我们使用以下结构时:

    struct sdshdr {
        int len;
        int free;
        char buf[];
    };

我们会像这样分配内存:

    struct sdshdr *sh;
    sh = zmalloc(sizeof(struct sdshdr)+initlen+1);

那么,char[]&的区别是什么?当在struct中声明了buff时,char*

char[]是否意味着继续发送地址?

2 个答案:

答案 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 );