gpt4 book ai didi

c - p = (int(*)[3])malloc(3*sizeof(*p)); 是什么意思?

转载 作者:太空宇宙 更新时间:2023-11-04 03:23:39 29 4
gpt4 key购买 nike

#include<stdio.h>
#include<stdlib.h>

int main()
{
int i, j;
int(*p)[3];
p = (int(*)[3])malloc(3*sizeof(*p));
for(i=0; i<3; i++)
{
for(j=0; j<3; j++)
printf("%d", p[i][j]);
}
return 0;
}

p 是一个指向 3 个整数的数组的指针,那么为什么它表现为一个二维数组

最佳答案

这是一个完全多余的转换,只会增加困惑。或者在 C++ 的情况下,它是必需的,但你不应该在 C++ 中使用 malloc...

p 是指向 int [3] 类型数组的数组指针。 *p 是一个数组,因此 3*sizeof(*p) 给出了 3 个这样的数组的大小,3*3*sizeof(int)。所以代码分配了一个数组数组——一个二维数组。

p 被设置为指向该数组的第一个元素。 p[i] 是对数组指针的指针运算,并为您提供数组编号 i。因此,指向一维数组的指针可用于访问二维数组。

编写 malloc 调用的更好方法是:

p = malloc( sizeof(int[3][3]) );

你的例子从不初始化数组,所以打印它们的内容会产生垃圾和可能未定义的行为。更正后的代码:

#include <stdio.h>
#include <stdlib.h>

int main (void)
{
int(*p)[3];
p = malloc( sizeof(int[3][3]) );
for(size_t i=0; i<3; i++)
{
for(size_t j=0; j<3; j++)
{
p[i][j] = (int)j;
printf("%d ", p[i][j]);
}
printf("\n");
}

free(p);
return 0;
}

相关主题:Correctly allocating multi-dimensional arrays .

关于c - p = (int(*)[3])malloc(3*sizeof(*p)); 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43180061/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com