C语言 正确的 malloc 语法,无需指定变量类型



我在网上看到了以下语法malloc

double ***x;
x = malloc(N * sizeof(*x));
for (i = 0; i < size_y; i++) {
   x[i] = malloc(N * sizeof(**x));

即,指向的变量类型没有指定到malloc中:通常,我们像这样声明指针:

double ***x;
x = malloc(N * sizeof(double*));
for (i = 0; i < size_y; i++) {
   x[i] = malloc(N * sizeof(double**));

据我所知,第一种方法允许快速更改所指向的类型,例如,将"double ***x"替换为"int ***x"。

在第二种方法中,我们必须将所有"double"替换为"int"sizeof

第一种方法是否有效,如果是,是否推荐?

它有效吗? 是的(原则上)。 sizeof运算符可以应用于类型(如第二个示例所示),也可以同样应用于任何表达式(返回该表达式返回的类型的大小)。 所以它是有效的。 不过,我说"原则上"是因为您将错误的表达式传递给了错误的malloc调用。

推荐吗? 好吧,出于您已经说明的原因,我会推荐它。

我更喜欢第一种方法。它符合 DRY 原则,可让您轻松查看分配的内存大小是否正确。

相关内容

  • 没有找到相关文章