程序应该返回矩阵的两个对角线中元素之和的差异,但它似乎只能使用某些值。
#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;
}
答案 0 :(得分:2)
df[] = lapply(df, gsub, pattern="$", replcement="", fixed=TRUE)
将是
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
变量 - 指向它的{p}将是{{ 1}}。
int