指向二维数组的指针

时间:2014-02-10 11:45:08

标签: c arrays pointers struct

我需要访问从指向struct的指针引用的二维数组,但我不能 查看存储在此数组中的值。 我使用的方法是在这里提出通过指向2D数组的指针进行访问(如此处所述Create a pointer to two-dimensional array) 结构封装在两个进程之间的shred内存中。 struct包含2D浮点数组。 altoght存储在2D数组的第一个数组中的值,函数foo中读取的值为0。 这是正确的访问模式吗? 差异是由于访问是通过双指针机制的事实? (使用箭头表示法)

typedef struct
{
    float32 Position[3];    
    float32 MODE[4];
    float32 GeneralInfo;
    float32 COLOR [8][3];
} tsInputData;

typedef float32 array_of_3_float32[3];

array_of_3_float32 *p_Color;
float32* p_Position;
float32* p_Mode;
float32* p_GeneralInfo;

void Init_Host(void* InData)
{
    pData = (tsInputData*)InData;

    p_Position = pData->Position;
    p_Mode = pData->MODE;
    p_GeneralInfo = &(pData->GeneralInfo);
    p_Color = pData->COLOR;
}

int foo()
{
    float32 var = p_Color[0][0];
}

2 个答案:

答案 0 :(得分:2)

你做的方式是正确的,虽然有点麻烦。您可以像这样定义二维数组指针:

float32 (*p_Color)[3]; // pointer to array of blocks of three floats each

在C89及以上版本中,您还可以使用大小的运行时变量:

size_t num_cols;
float32 (*p_Color)[num_cols];

答案 1 :(得分:0)

E.g。指向2D数组的指针

float data[8][3] = { {1.2, 2.3, 4.5},{1.25, 1.5, 1.75}};
float (*a_8_3)[8][3] = &data;//pointer to float [8][3]
float (*a_3)[3] = data;      //pointer to float [3]
printf("%f\n", (*a_8_3)[1][2]);//1.75
printf("%f\n", a_3[1][1]);     //1.5