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