c - 用矩阵实现函数 - 差异
问题描述
我有以下打印矩阵的函数:
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//
}
第一种方式,函数实际上是获取矩阵的起始地址。我明白了。
但是,我不明白为什么函数实际上以第一种方式获取矩阵中第二个元素的地址,而不是矩阵中第二行的地址(而后者实际上是通过第三种方式实现的) .
解决方案
这与运算符优先级有关。
(type) 运算符优先于二元加法运算符 (+)。如果您希望第二种方式与第三种方式相同,请在第二种方式中加上
mat + 1
括号()
。
然后,
printMat((int*)(mat+1), 6); //second way//
将与以下内容相同:
printMat(mat+1, 6); //third way//
推荐阅读
- asp.net - 如何更改模型绑定名称
- c# - .NET Core 2 和 DI - 在构造函数中使用 appsettings.json 中的值?
- reactjs - 如何在一个通用组件中执行多按钮 onPress 功能 - React Native
- python - line.split() 列表赋值索引超出范围
- asp.net - 显示额外空格的 SSRS 报告
- android - 从 android 中的同一个活动启动一个新的活动实例
- android - 为什么删除 gradle 中的 rootProject.buildDir 任务删除了模块中的构建目录
- json - 将数据从 JSON 文件加载到 html/ 控制台
- java - java中的封闭变量是什么?
- bash - Bash 脚本接受有效数字格式的变量