gpt4 book ai didi

c - 用矩阵实现函数 - 差异

转载 作者:行者123 更新时间:2023-11-30 16:29:03 25 4
gpt4 key购买 nike

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

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//
}

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

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

最佳答案

原因是 C 运算符优先级。强制转换比 +

更强
(int*)mat + 1 is the same as ((int*)mat) + 1

所以 mat 在加 1 之前被转换为 int* (因此你增加了一个“指向 int 的指针”)

这里 mat+1 你没有进行强制转换,所以它会像“行增量”一样,因为在这个表达式中 mat 充当“指向3 个整数的数组”。

顺便说一句:请注意,您的代码现在具有未定义的行为。

关于c - 用矩阵实现函数 - 差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52070095/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com