更正malloc的语法,但不指定变量类型

kb5ga3dv  于 2023-03-17  发布在  其他
关注(0)|答案(2)|浏览(98)

我在Web上看到了使用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“替换为sizeof中的“int
第一种方法有效吗?如果有效,是否推荐?

aor9mmx1

aor9mmx11#

  • 它有效吗?* 是的(原则上)。sizeof操作符可以应用于一个类型(如第二个示例),或者同样地,它可以应用于任何表达式(返回该表达式返回的类型的大小)。所以它是有效的。我说“原则上”是因为您将错误的表达式传递给了错误的malloc调用。
  • 值得推荐吗 * 我会推荐的原因你已经说过了
7uzetpgm

7uzetpgm2#

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

相关问题