使用指向其结构的指针或结构本身来分配内存是否更好?

LED*_*tom 4 c malloc

我通过在实际代码中用(1)替换标记的行来获得相同的值:

Date *ptrdate = malloc(12 * sizeof(*ptrdate));
Run Code Online (Sandbox Code Playgroud)

问题:哪一个更好,为什么?

这是我的实际代码:

typedef struct {
    int day;
    int mo;
} Date;

void main(){
    Date *ptrdate = malloc(12 * sizeof(Date)); //(1)

    ptrdate[0].day=26;
    ptrdate[0].mo=5;
    printf("Date:%d/%d\n", ptrdate[0].day, ptrdate[0].mo);
}
Run Code Online (Sandbox Code Playgroud)

Sou*_*osh 7

编写代码为

Date *ptrdate = malloc(12 * sizeof(*ptrdate));
Run Code Online (Sandbox Code Playgroud)

或者,更清洁的方法

Date *ptrdate = malloc(12 * sizeof *ptrdate);  //sizeof is operator, no need for extra "()"
Run Code Online (Sandbox Code Playgroud)

更容易接受和期望,因为它使代码更健壮.即使

  • ptrdate将来改变的类型
  • 使用代码以及任何具有单独typedef编辑的外部库Date(创建冲突)[#]

您无需更改此部分代码.

此外,推荐的签名main()int main(void).


[#]感谢@Elias Van Ootegem先生发表以下评论]

  • 当您打算使用命令行参数时,可以使用@Cubia`int main(int argc,char*argv [])`.如果你不需要它们,`int main(void)`就可以了.参见章节"5.1.2.2.1","C11"标准. (3认同)