Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
malloc的正确语法,不指定变量类型_C_Malloc - Fatal编程技术网

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

malloc的正确语法,不指定变量类型,c,malloc,C,Malloc,我在网上看到了使用malloc的以下语法: double ***x; x = malloc(N * sizeof(*x)); for (i = 0; i < size_y; i++) { x[i] = malloc(N * sizeof(**x)); 据我所知,第一种方法允许快速更改指向的类型,例如,只需将“double***x”替换为“int***x” 在第二种方法中,我们必须将所有“double”替换为“int”为sizeof 第一种方法有效吗?如果有效,是否推荐 谢谢你的帮助

我在网上看到了使用
malloc
的以下语法:

double ***x;
x = malloc(N * sizeof(*x));
for (i = 0; i < size_y; i++) {
   x[i] = malloc(N * sizeof(**x));
据我所知,第一种方法允许快速更改指向的类型,例如,只需将“
double***x
”替换为“
int***x

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

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


谢谢你的帮助

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

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


推荐吗?嗯,基于您已经说明的原因,我建议您使用它。

您显示的代码中有一个小小的错误,第一个
malloc
调用应该是
sizeof*x
,第二个
sizeof**x
调用应该是
<代码>x=malloc(N*sizeof(双**))更明确地说明了您正在分配的内容(这里是指向double的指针)。另一方面,
x=malloc(N*sizeof(**x))float
long double
而不是double,则code>不会更改。这两种方法都是有效的,没有一种方法比另一种方法更受推荐-除了项目或组织中的当地规则之外哦,被称为a通常不是一种恭维。对不起,我有点困惑您的问题表明您对声明的一些基本知识缺乏理解,
sizof
以及实际使用的
malloc
。这些都是理解C程序所必需的基础知识,每本C语言书都会教授这些知识。请找到一个好的,并通过章节的工作。
double ***x;
x = malloc(N * sizeof(double*));
for (i = 0; i < size_y; i++) {
   x[i] = malloc(N * sizeof(double**));