首页 > 解决方案 > 用矩阵实现函数 - 差异

问题描述

我有以下打印矩阵的函数:

void printMat(int* mat, int size)
{
    int i;
    for (i=0 ; i < size ; i++)
        printf("%d ", mat[i]);
    printf("\n");
}

现在,假设我有一个特定的矩阵,我想通过三种方式将它传递给上面的函数来实现它的打印:

void main()
{
    int mat[2][3] = { {1,2,3}, {4,5,6} };

    printMat((int*)mat, 6);     //first way//
    printMat((int*)mat+1, 6);   //second way//
    printMat(mat+1, 6);         //third way//
}

一种方式,函数实际上是获取矩阵的起始地址。我明白了。

但是,我不明白为什么函数实际上以第一种方式获取矩阵中第二个元素的地址,而不是矩阵中第二行的地址(而后者实际上是通过第三种方式实现的) .

标签: cmatrixpointer-arithmetic

解决方案


这与运算符优先级有关。

(type) 运算符优先于二元加法运算符 (+)。如果您希望第二种方式与第三种方式相同,请在第二种方式中加上 mat + 1括号()

然后,

printMat((int*)(mat+1), 6);   //second way//

将与以下内容相同:

printMat(mat+1, 6);         //third way//

推荐阅读