2014-02-10 94 views
0

我需要訪問從指針指向結構的2維數組,但我不能 看到存儲在此數組中的值。 我使用的方法thta在這裏提出通過指針訪問二維數組(這裏描述的是Create a pointer to two-dimensional array) 結構封裝在2個進程之間的碎片內存區域。 該結構包含浮點數的二維數組。 altoght在二維數組的第一個數組中存儲值,在函數foo中讀取的值爲0。 這是正確的訪問模式? 是不同的是由於訪問是通過雙指針機制的事實? (使用箭頭符號)指向2維數組

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

你做這件事的方式是正確的,雖然有點麻煩。您可以定義二維數組的指針這樣的:

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

在C89和你上面也允許使用運行時變量的大小:

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

它應該是「C99及以上」,我認爲。 –

+0

可變長度數組在C 1999中是強制性的。C 2011使它們成爲可選項。 –

0

例如指向二維數組

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