“实数”数组指针和malloc

弗雷德里克

因此,我只是在玩弄数组指针,以了解它们如何工作,下面的示例为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

对于我的问题,您几乎很少看到这样的代码。这样做有什么危险吗?还是仅仅是“错误的代码”。再说一次,这只是我在玩数组指针。

4386427

这样做有什么危险吗?还是仅仅是“错误的代码”。

否。这实际上是制作动态分配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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章