C 双指针数组的访问数据

C 双指针数组的访问数据,c,pointers,dynamic,malloc,C,Pointers,Dynamic,Malloc,我正在编写一个使用双指针静态数组的数据结构。第一个数组的每个单元格都指向一个指针的动态数组,其中每个指针都可以指向一种数据类型(假设一个int)。我想从指针的主数组访问数据 下面是一个示例我想要实现的目标,为了让代码更清晰,我故意省略了对malloc正确分配的检查: #include <stdio.h> #include<stdlib.h> typedef int *pointer; int main() { int **mainArray[10] = {

我正在编写一个使用双指针静态数组的数据结构。第一个数组的每个单元格都指向一个指针的动态数组,其中每个指针都可以指向一种数据类型(假设一个
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;
}
#包括
#包括
typedef int*指针;
int main(){
int**mainArray[10]={NULL};
int**p=NULL;
int n=5;
p=malloc(15*sizeof(指针));
//以下指令没有意义,因为指针
//未按照asnwers中的建议初始化。
*p[3]=n;
main数组[4]=p;
返回0;
}
我想知道如何从
mainArray
访问
int
值,例如,打印其值

其思想是使用
p
分配动态内存,然后跟踪使用
mainArray
创建的内存

我知道使用
指针,我可以使用例如
**mainArray[n]
,但是我没有找到方法来指定第二个动态数组的索引。使用
**mainArray[n]
我将访问
mainArray[n]
,然后访问
p[0]
指向的
int
(如果我没有错的话)

例如,如何指定访问
mainArray[4]
中的
p[3]
(可能是为了使用
printf
打印它)

PS:我知道我所做的事情可以通过矩阵轻松实现,但由于一些外部限制,我需要这种方法

我想知道如何从
mainArray
访问int值, 例如打印他的价值

其想法是使用
p
分配动态内存,然后跟踪 使用
mainArray
创建的内存

您正确地完成了这一部分,在
p
中生成了一个指向一个对象的指针,该对象可以合理地描述为15
int*
的动态数组。
p
的值属于要分配给
mainArray
元素的正确类型,但请注意,
p
的元素均未初始化。他们没有指出任何东西。在访问它们所指向的位置之前,需要为它们指定值,以便它们指向某个位置

我知道我可以使用双指针,例如
**mainArray[n]
, 但是我没有找到方法来指定第二个动态的索引 数组。使用
**mainArray[n]
我将访问
mainArray[n]
,然后
p[0]
所指的int(如果我没有错的话)

如何指定(例如)访问
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
的计算没有太大区别,因为第一个
+
操作的结果是第二个操作数

我想知道如何从
mainArray
访问int值, 例如打印他的价值

其想法是使用
p
分配动态内存,然后跟踪 使用
mainArray
创建的内存

您正确地完成了这一部分,在
p
中生成了一个指向一个对象的指针,该对象可以合理地描述为15
int*
的动态数组。
p
的值属于要分配给
mainArray
元素的正确类型,但请注意,
p
的元素均未初始化。他们没有指出任何东西。在访问它们所指向的位置之前,需要为它们指定值,以便它们指向某个位置

我知道我可以使用双指针,例如
**mainArray[n]
, 但是我没有找到方法来指定第二个动态的索引 数组。使用
**mainArray[n]
我将访问
mainArray[n]
,然后
p[0]
所指的int(如果我没有错的话)

如何指定(例如)访问
mainArray[4]
(也许是为了用printf打印出来)

mainArray[4]
是一个
int**
。如果我们将其分配给变量
p
,那么我们可以通过普通的索引操作符访问索引3处的元素,如您所示。然后,表达式
mainArray[4]
:表达式
mainArray[4][3]
为您提供所需的值(一个
int*

通常,您确实需要注意操作符的关联性和pr
p[3] = malloc(sizeof(**p));
*p[3] = n;
int x;
p[3] = &x;
*p[3] = n;
p[3] = malloc(100 * sizeof(**p));
*(p[3] + 10) = n;
p[3][9] = n;