【发布时间】:2018-07-30 15:36:41
【问题描述】:
我正在编写一个使用双指针静态数组的数据结构。第一个数组的每个单元都指向一个动态指针数组,其中每个指针都可以指向一种数据(假设int)。我想访问主指针数组中的数据
这是我想要实现的示例,我故意省略了对malloc 正确分配的检查为了让代码更清晰:
#include <stdio.h>
#include<stdlib.h>
typedef int *pointer;
int main() {
int **mainArray[10] = {NULL};
int **p = NULL;
int n = 5;
p = malloc(15 * sizeof(pointer));
//the following instruction makes no sense since the pointer
//is not initialized, as suggested in the asnwers.
*p[3] = n;
mainArray[4] = p;
return 0;
}
我想知道如何从mainArray 访问int 值,例如打印它的值。
想法是使用p 分配动态内存,然后跟踪使用mainArray 创建的内存。
我知道我可以使用double 指针,例如**mainArray[n],但我找不到如何指定第二个动态数组的索引的方法。使用**mainArray[n],我将访问mainArray[n],然后是p[0] 指向的int(如果我没记错的话)。
我如何指定,例如,在mainArray[4] 中访问p[3](也许是为了用printf 打印它)?
PS:我知道我正在做的事情可以通过矩阵轻松实现,但由于一些外部限制,我需要这种方法。
【问题讨论】:
-
这是不正确的。 ** 已经做了两次取消引用,所以双指针变成了一个值。你不能再索引了。此外,您的分配是错误的,因为您没有将任何内容分配给 mainArray 等。如果您只是将编写的代码放入编译器,它将首先出现错误。还有一种说法是,如果您需要三星级编程(请参阅 mainArray),那么代码很可能有一些非常错误的地方。
-
@SamiKuhmonen 为什么我没有为 mainArray 分配任何东西?这个想法是让mainArray的单元格中的数组指向p指向的相同地址,即分配的动态内存的地址。我错了吗?
-
对不起,你在 mainArray 中有 10 个指针,你可以在其中分配东西,但是 **p[3] 例如不起作用,因为它不是三重指针,你也没有分配任何东西到它的第二层。这很复杂,不清楚为什么需要这种复杂性。
-
@SamiKuhmonen 我编辑了它,是现在吗?顺便说一句,我需要这种方式,因为我有第一个静态 mainArray,其中(在我的真实项目中)每个单元格都指向一个 hashmap
-
您仍然可以访问内容,而无需使用 *p[3] 进行分配。你只分配了 15 个指针,它们指向它们碰巧指向的任何地方,然后你试图访问第一个指向的内存。不允许