gpt4 book ai didi

c - 在 C 中声明一个 n 指针

转载 作者:行者123 更新时间:2023-12-04 02:48:32 26 4
gpt4 key购买 nike

在 C 中,我想声明一个 n 维数组,如下面的 3 维数组。

printf("please insert n1, n2, n3\n");
scanf("%d %d %d", &n1, &n2, &n3);

int ***nda;
nda = (int ***)malloc(n1*sizeof(int **));

for (i = 0; i < n1; i++) {
nda[i] = malloc(n2*sizeof(int *));
for (j = 0; j < n2; j++) {
nda[i][j] = malloc(n3*sizeof(int));
}
}

我想使用宏自动执行此过程并扩展到 n-dim,我发现我需要像这样声明一个指针:

type *...*(n times)typename;  

我想宏是一种看似可行的方法,但在这里搜索答案后,我发现宏不会递归扩展。
在 C 中是否有任何解决方法可以做到这一点?

最佳答案

停止做你现在做的事!每个级别的指针间接都会对您的程序产生显着的性能影响。您在那里创建的不是多维数组,而是一棵 n 元树,其中每个数组元素都是指向多个分支的指针,这些分支再次展开。

如果要为 n 维数据创建数组,请按以下方式进行:

size_t dim[...]

int *nda;
nda = malloc(sizeof(int) * dim[0] * dim[1] * … * dim[n]);

要寻址数组中的一个元素,使用这个

nda[ dim[0]*(i[1] + dim[1]*(i[2] + dim[…]*(i[…+1])) + i[0] ];

关于c - 在 C 中声明一个 n 指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18280415/

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