首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将一个二维数组传递给C++中的函数

将一个二维数组传递给C++中的函数
EN

Stack Overflow用户
提问于 2018-01-20 23:28:38
回答 1查看 38关注 0票数 0

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

代码语言:javascript
复制
#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;
}
EN

回答 1

Stack Overflow用户

发布于 2018-01-20 23:30:14

代码语言:javascript
复制
int SommaDIag(int *mat)

将会是

代码语言:javascript
复制
int SommaDIag(int (*mat)[N])

当传递给函数时,数组会衰减为指向第一个元素的指针。这里的mat是一个数组数组。所以指向第一个元素的指针应该是int(*)[N]

解决方案是更改函数签名,如我所说的int SommaDIag(int (*mat)[N])

代码语言:javascript
复制
int SommaDIag(int (*mat)[N]){ // SommaDIag(int mat[][N])
    int rig, col, somma = 0;

    ...
}

你也可以像这样很容易得到不同之处-

代码语言:javascript
复制
for(rig = 0, col = 0; rig < N && col < N; rig ++, col++)
   somma += mat[rig][col];

当你将一个一维数组的int传递给一个函数时,它会衰减成指向第一个元素的指针--在本例中,第一个元素是一个int变量--它的指针应该是int*

代码语言:javascript
复制
int a[10];

f(a);

void f(int *a){ // f(int a[])
  ...
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48357833

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档