我正在写一个使用双指针静态数组的数据结构。第一个数组的每个单元格都指向一个指针的动态数组,每个指针都可以指向一种数据类型(假设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;
}

我想知道如何从int访问mainArray值,例如,打印它的值。
其思想是使用p分配动态内存,然后跟踪使用mainArray创建的内存。
我知道使用double指针可以使用例如**mainArray[n],但是我找不到如何指定第二个动态数组的索引的方法。使用**mainArray[n]我将访问mainArray[n],然后访问int所指的p[0](如果我没有错的话)。
例如,如何指定访问p[3]中的mainArray[4](可能是为了用printf打印它)?
注:我知道用矩阵可以很容易地实现我的工作,但是由于一些外部约束,我需要这种方法。

最佳答案

我想知道如何从mainArray访问int值,
例如打印他的价值。
其思想是使用p分配动态内存,然后跟踪
mainArray创建的内存。
您正确地完成了这一部分,在p中产生一个指向对象的指针,该对象可以合理地描述为15int *的动态数组p的值是分配给mainArray元素的正确类型,但请注意,没有初始化任何p元素。他们什么也没指。您需要将值赋给它们,以便它们指向某个地方,然后才能访问它们指向的位置。
我知道对于双指针,我可以使用例如**mainArray[n]
但是我没有办法指定第二个动态的索引
阵列。使用**mainArray[n]我将访问mainArray[n]然后
int由p[0]指出(如果我没有错)。
如何指定(例如)访问p[3]中的mainArray[4]
(也许是为了用printf打印出来)?
mainArray[4]是一个int **。如果我们将其赋值给变量p,那么我们可以通过普通索引运算符访问索引3中的元素,如您所示。这同样适用于表达式mainArray[4]:表达式mainArray[4][3]为您提供所需的值(一个int *)。
通常,在将运算符链接在一起时,需要注意运算符的关联性和优先级,但这种情况很简单。你可以写和(mainArray[4])[3]一样的东西,但我不明白你为什么要写。
也许你正在苦苦挣扎的是,在mainArray[4][3]中,这两个索引操作符是独立的和独立的。使用该表单不需要将mainArray声明为二维数组;只需要将其声明为指针或指针数组或数组数组(二维数组只是数组数组)。第一个索引运算符应用于mainArray本身;第二个索引运算符应用于第一个结果。这与对1 + 2 + 3的求值没有太大不同,因为在这里,第一个+操作的结果是第二个操作的操作数。

关于c - 访问双指针数组的数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51597547/

10-11 21:08