指向多维数组的指针



我试图解决结构矩阵,但有些出错。这是代码:

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, "nnsizeof st_t:%dnn", 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:%pn", 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]与matrix[0][1]的地址不同?

您已经声明pMatrix是指向st_t的3 * 5矩阵的指针,也就是说,它指向一个包含5个st_t对象的3个数组的数组。因此,pMatrix[0]是一个包含5个st_t对象的3个数组的数组。然而,由于它是一个数组,它被自动转换为指向数组第一个元素的指针。所以它变成了一个指向5个st_t对象数组的指针。

pMatrix[0][0]pMatrix[0][1]pMatrix[0][2]等是连续的5个st_t对象数组,而不是连续的st_t对象数组。

很可能,你想要的是:

// Declare pMatrix to be a pointer to an array of 5 st_t objects,
// and point it to the first row of matrix.
st_t (*pMatrix)[5] = matrix;

相关内容

  • 没有找到相关文章

最新更新