gpt4 book ai didi

c - 将二维数组传递给 C 中的函数

转载 作者:太空宇宙 更新时间:2023-11-04 07:58:33 25 4
gpt4 key购买 nike

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

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

最佳答案

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[])
...
}

关于c - 将二维数组传递给 C 中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48357833/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com