我需要访问从指向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];
}
答案 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