提问人:ZSR 提问时间:1/8/2023 最后编辑:ZSR 更新时间:1/8/2023 访问量:67
关于在 2d 数组中使用 malloc 和 C 中已知的 1 维的问题 [重复]
Question about using malloc in 2d array with the the 1 dimension known in C [duplicate]
问:
这里是一般问题。
我遇到了一个程序,它有一个像这样的 2d 数组 ps[i][j]。问题是我知道 j 的大小是 3,但我不知道 i 的大小(因此我想使用 malloc 和 free() 的原因。如何在这样的数组中使用 malloc?因为它不是一维数组,而是二维数组,但问题是我只知道 i 的大小。例如,这是数组
ps[?][3]
.j 的大小是已知的,它是 3,但 i 的大小是未知的。
感谢您的宝贵时间,我期待您的回复
答:
1赞
dbush
1/8/2023
#1
您需要声明指向给定大小的数组的指针,即 ,然后为该类型的数组的元素分配空间:unsigned int (*arr)[3]
i
unsigned int (*arr)[3] = malloc(i * sizeof(unsigned int[3]));
更好的是:
unsigned int (*arr)[3] = malloc(i * sizeof *arr);
然后你像这样释放它:
free(arr);
评论
0赞
ZSR
1/8/2023
非常感谢!我今晚会尝试这个解决方案,我会让你知道
0赞
ZSR
1/8/2023
Begginer 问题,既然我希望它是无符号的 int 类型,我可以这样做吗?无符号 int(ps)[3];(*ps)[3]= malloc(isizeof (*int[3]));?还有我什么时候会使用 free(); 我会这样做吗: free((*ps)[3]); ?
0赞
ZSR
1/9/2023
好的最后一个问题,一般来说,是建议将 malloc 与 realloc 一起使用,还是建议仅使用 realloc,如果是,我如何在我的情况下使用它?谢谢
0赞
dbush
1/9/2023
@ZSR 这应该是一个单独的问题。
0赞
ZSR
1/9/2023
你好,是的,我明白了,但是关于你对上面的回答,我还有一个问题,如果我不知道我这样做,我会用像 4 这样的数字初始化它,然后像这样使用 malloc?int i=2,然后是无符号 int **(*arr)[3] = malloc(i * sizeof((unsigned int[3])); .这会让我看到表 arr 将在 1 维中获得超过 4 个元素吗?或者更好的是,我可以做到 i=1,因为我不知道最后的 i,但我知道它会超过 1。感谢您对此的反馈,再次感谢您
评论
T (*p)[j] = malloc(i * sizeof *p);
将要求内存为类型的元素行数组,之后您可以访问元素(前提是不是空指针,表示失败)。如果这不是你想要的,你需要澄清这个问题。i
j
T
p[a][b]
p
malloc