int main(){
int right[2][3] = {
{1,4,6}, {2,7,5}
}
....
calc(right);
}
int calc(int ** right){
printf("%i", right[0][0]);
}
Run Code Online (Sandbox Code Playgroud)
我计算基于矩阵计算一些数字的函数,但我不知道为什么当我在calc函数中访问变量时我得到seg错误.有没有人知道解决方案?
编辑:现在这就是它在calc函数中所做的一切.我有一些计算的东西,但它都注释掉了试图弄清楚如何访问这个变量.
C中的二维数组不像您认为的那样工作.(别担心,你并不孤单 - 这是一种常见的误解.)
代码中隐含的假设right是int *指针数组,每个指针都指向一个数组int.它可以这样做 - 而且,令人困惑的是,访问这样一个数组的语法是相同的,这可能是导致这种误解的原因.
C 实际做的是制作right一个12 int秒的数组,在内存中连续排列.像这样的数组访问
a=right[i][j];
Run Code Online (Sandbox Code Playgroud)
实际上相当于:
int *right_one_dimensional=(int *)right;
a=right[i*3 + j];
Run Code Online (Sandbox Code Playgroud)
要将数组传递给calc函数,需要执行以下操作:
int calc(int *right, size_t d){
// For example
a=right[i*d + j];
}
Run Code Online (Sandbox Code Playgroud)
然后像这样调用它:
int right[2][3] = {
{1,4,6}, {2,7,5}
};
calc(&right[0][0], 3);
Run Code Online (Sandbox Code Playgroud)
编辑:有关这方面的更多背景,与Binary Worrier的评论相关的问题绝对值得一看.