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
中生成了一个指向一个对象的指针,该对象可以合理地描述为15int*
的动态数组。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
中生成了一个指向一个对象的指针,该对象可以合理地描述为15int*
的动态数组。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;