传递二维数组以在C中运行

时间:2018-01-20 15:28:38

标签: c arrays function

程序应该返回矩阵的两个对角线中元素之和的差异,但它似乎只能使用某些值。

#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;
}

1 个答案:

答案 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