我有 3 个整数
A
、B
和 C
,我从中创建指针,将它们分组到指向指针的指针数组 arrayABC
中:
int A = 1;
int B = 2;
int C = 3;
int *ptA = &A;
int *ptB = &B;
int *ptC = &C;
int **arrayABC[] = { &ptA, &ptB, &ptC };
同时我有整数数组
DEF
:
int DEF[] = {4,5,6};
我想将它包装在一个指针数组
arrayDEF
中,这些指针提供与数组arrayABC
相同的接口。我尝试了以下方法:
int **arrayDEF[] = &(int *){&DEF};
我的最终目标是能够将
arrayABC
和 arrayDEF
分组到父数组 arrayGlobal
中,如下所示:
int ***arrayGlobal[] = {arrayABC,arrayDEF};
我需要能够像这样访问
arrayGlobal
:
printf("A = %d\n", ***arrayGlobal[0][0]); // A = 1
printf("B = %d\n", ***arrayGlobal[0][1]); // B = 2
printf("C = %d\n", ***arrayGlobal[0][2]); // C = 3
printf("D = %d\n", ***arrayGlobal[1][0]); // D = 4
printf("E = %d\n", ***arrayGlobal[1][1]); // E = 5
printf("F = %d\n", ***arrayGlobal[1][2]); // F = 6
我能够编译,没有任何错误。然而,执行会导致分段错误。我怀疑
arrayDEF
(指向整数表的指针的指针)的类型类似于 arrayABC
(指向整数指针的指针表)的类型,但不等效。你确认吗?
我无法更改
arrayABC
的结构(由外部文件强加),但我可以适应 arrayDEF
。有没有办法制作 arrayDEF
一个指向 DEF
的每一项的指针的指针表?
要通过类型
int DEF[] = {4,5,6};
访问 int **[3]
,您需要将指向这些值的指针存储在某处。 例如在指针数组中ptDEF
(命名约定不一致):
#include <stdio.h>
int main() {
int A = 1;
int B = 2;
int C = 3;
int *ptA = &A;
int *ptB = &B;
int *ptC = &C;
int **arrayABC[] = {&ptA, &ptB, &ptC};
int DEF[] = {4,5,6};
int *ptDEF[] = {&DEF[0], &DEF[1], &DEF[2]};
int **arrayDEF[] = {
&ptDEF[0],
&ptDEF[1],
&ptDEF[2]
};
int ***arrayGlobal[] = {
arrayABC,
arrayDEF
};
printf("A = %d\n", **arrayGlobal[0][0]); // A = 1
printf("B = %d\n", **arrayGlobal[0][1]); // B = 2
printf("C = %d\n", **arrayGlobal[0][2]); // C = 3
printf("D = %d\n", **arrayGlobal[1][0]); // D = 4
printf("E = %d\n", **arrayGlobal[1][1]); // E = 5
printf("F = %d\n", **arrayGlobal[1][2]); // F = 6
}
arrayGlobal
的声明与您在打印语句中访问变量的方式不匹配,所以我假设额外的*
是一个拼写错误。