指向整数的指针表 VS 指向整数表的指针

问题描述 投票:0回答:1

我有 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
的每一项的指针的指针表?

arrays c pointers compound-literals
1个回答
0
投票

要通过类型

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
的声明与您在打印语句中访问变量的方式不匹配,所以我假设额外的
*
是一个拼写错误。

© www.soinside.com 2019 - 2024. All rights reserved.