问答详情
源自:6-11 多维数组的遍历

我有个问题,请求各位大佬解答。

C中怎么定义N维数组,,我本来想做个N维数组对角线元素之和的,编译完之后发现定义函数时候,形参定义成arr[][]好像不对,所以想到定义N维数组怎么定义。是arr[][]...[]么......

顺便把失败的代码贴一下吧。

#include <stdio.h>

#include <stdlib.h>

int diasum(int arr[n][n]...[n])

{

int n;

int i,j;

int sum;

int arr[n][n]={{1,2,...,n},{1,2,...,n},...,{1,2,...,n}};

for(i=0;i<n;i++)

{

for(j=0;j<n;j++)

{

if(i==j||(i+j)==n-1)

{

sum+=arr[i][j];

}

}

}

printf("对角线元素之和是%d\n",sum);

return 0;

}


/* run this program using the console pauser or add your own getch, system("pause") or input loop */


int main(int argc, char *argv[]) {

int arr[5][5]={{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15},{16,17,18,19,20},{21,22,23,24,25}};

diasum(arr[5][5]);

return 0;

}


提问者:Sunglasses_cat 2017-08-26 11:06

个回答

  • Mr____W
    2017-08-26 15:40:39
    已采纳

    你做的不是n维数组,是n行n列的二维数组。

    二维数组定义的时候,可以不指定行的数量,但是必须指定列的数量。

    #include <stdio.h>

    int diasum(int arr[][5],int n)

    {

    int i,j;

    int sum = 0;

    for(i=0;i<n;i++)

    {

    for(j=0;j<n;j++)

    {

    if(i==j||(i+j)==n-1)

    sum+=arr[i][j];

    }

    }

    printf("对角线元素之和是%d\n",sum);

    return 0;

    }

    int main()

    {

    int arr1[][5]={{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15},{16,17,18,19,20},{21,22,23,24,25}};

    diasum(arr1,5);

    return 0;

    }