程序应该返回矩阵的两条对角线中元素之和的差值,但它似乎只对某些值起作用。
#include <stdio.h>
#include <stdlib.h>
#define N 2
int SommaDIag(int *mat);
int main(){
int mat[N][N] = {{3, 2},
{6, 2}};
return SommaDIag(mat);
}
int SommaDIag(int *mat){
int rig, col, somma = 0;
for(rig = 0, col = 0; rig < N && col < N; rig ++, col++)
somma += *(mat + col + N*rig);
for(rig = N-1, col = 0; rig >= 0 && col < N; rig --, col++)
somma -= *(mat + col + N*rig);
return somma;
}发布于 2018-01-20 23:30:14
int SommaDIag(int *mat)将会是
int SommaDIag(int (*mat)[N])当传递给函数时,数组会衰减为指向第一个元素的指针。这里的mat是一个数组数组。所以指向第一个元素的指针应该是int(*)[N]。
解决方案是更改函数签名,如我所说的int SommaDIag(int (*mat)[N])。
int SommaDIag(int (*mat)[N]){ // SommaDIag(int mat[][N])
int rig, col, somma = 0;
...
}你也可以像这样很容易得到不同之处-
for(rig = 0, col = 0; rig < N && col < N; rig ++, col++)
somma += mat[rig][col];当你将一个一维数组的int传递给一个函数时,它会衰减成指向第一个元素的指针--在本例中,第一个元素是一个int变量--它的指针应该是int*。
int a[10];
f(a);
void f(int *a){ // f(int a[])
...
}https://stackoverflow.com/questions/48357833
复制相似问题