因此,我只是在玩弄数组指针,以了解它们如何工作,下面的示例为2个数组指针分配一个空间,该数组指向10个整数的数组。
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int (*p)[10] = malloc(sizeof(int[10]) * 2);
for (int arrayI = 0; arrayI < 2; ++arrayI) {
for (int i = 0; i < 10; ++i) {
p[arrayI][i] = (arrayI+1) * i;
}
}
for (int arrayI = 0; arrayI < 2; ++arrayI) {
for (int i = 0; i < 10; ++i) {
printf("%d\n", p[arrayI][i]);
}
printf("\n");
}
}
这似乎工作正常,并给我:
C:\Users\USERNAME\Desktop>gcc -Wall -Wextra --std=c18 a.c && a.exe
0
1
2
3
4
5
6
7
8
9
0
2
4
6
8
10
12
14
16
18
对于我的问题,您几乎很少看到这样的代码。这样做有什么危险吗?还是仅仅是“错误的代码”。再说一次,这只是我在玩数组指针。
这样做有什么危险吗?还是仅仅是“错误的代码”。
否。这实际上是制作动态分配2D数组的正确方法。
代替
int (*p)[10] = malloc(sizeof(int[10]) * 2);
我更喜欢
int (*p)[10] = malloc(2 * sizeof *p);
正如p
一个指向10个整数的数组的指针一样,它*p
也是一个10个整数的数组。
许多人喜欢显式释放内存。因为程序会终止,所以它不是必需的。这是基于意见的,但我要补充:
free(p);
return 0;
在程序结束时。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句