1
我正在嘗試解決struct的矩陣,但有些出錯。 這的代碼:多維數組指針
typedef struct {
bool state;
float val;
char ch[11];
} st_t;
st_t matrix[3][5];
int main(int argc, char *argv[])
{
int i, j;
// Init matrix value matrix[i][j] = i.j
....
// Init matrix pointer
st_t (*pMatrix)[3][5];
pMatrix = &matrix;
// print address element
fprintf(stderr, "\n\nsizeof st_t:%d\n\n", sizeof(st_t));
for(i = 0; i < 3; i++)
{
for(j = 0; j < 5; j++)
fprintf(stderr, "matrix[%d][%d] ADDR:%p pMatrix[%d][%d] ADDR:%p\n", i, j, &(matrix[i][j]), i, j, &pMatrix[i][j]);
fprintf(stderr, "\n");
}
return 0;
}
這是代碼的輸出:
sizeof st_t:16
matrix[0][0] ADDR:0x8049a00 pMatrix[0][0] ADDR:0x8049a00
matrix[0][1] ADDR:0x8049a10 pMatrix[0][1] ADDR:0x8049a50
matrix[0][2] ADDR:0x8049a20 pMatrix[0][2] ADDR:0x8049aa0
matrix[0][3] ADDR:0x8049a30 pMatrix[0][3] ADDR:0x8049af0
matrix[0][4] ADDR:0x8049a40 pMatrix[0][4] ADDR:0x8049b40
matrix[1][0] ADDR:0x8049a50 pMatrix[1][0] ADDR:0x8049af0
例如爲什麼pMatrix [0] [1]是從矩陣的地址[0] [1]?
在此先感謝。
謝謝pMatrix [0]是一個指向5元素的數組。 pMatrix [0] [0]是數組,pMatrix [0] [0] [2]是數組的第三個元素。我們也可以爲同一個元素編寫(* pMatrix)[0] [2]。 – GMERiello
+1的答案。 @GMERiello不明白你的評論是什麼意思,但答案似乎是正確的。這是你想要或沒有? –
@eznme是的,答案幫助了我,我想通過指針pMatrix訪問矩陣的單個元素。現在pMatrix [0] [1]不是一個st_t元素,而是一個完整的行。 pMatrix [0] [1] [2]是第二行的第三個元素,但也包含(* pMatrix)[1] [2],換言之(明顯)pMatrix [0] ==(* pMatrix)。我希望現在更清楚。 – GMERiello