将2D数组传递给函数

时间:2016-03-31 09:09:45

标签: c function pointers multidimensional-array

我是新手,我正在做功能练习。执行下面的代码后,我得到了一堆垃圾值的输出。 可能是什么错误? 我是否正确地将2d数组传递给函数?

#include <stdio.h>
void populArray (int array[][6], int rows);
void computtotal (int array[][6], int rows);
int main()
{
    int arr[10][6],ave,max;
    populArray( arr, 10);
    computtotal( arr, 10);

    return 0;
}
void populArray (int array[][6],int rows)
{
    int i,j;
    for (i=0;i++;i<rows)
    {
        for (j=0;j++;j<6)
        {
            printf("enter %d and %d th elemnt",i,j);
            scanf("%d",&array[i][j]);
        }
    }
 } 
 void computtotal (int array[][6], int rows)
 {
    int i,j,sum=0;
    for (i=0;i<rows;i++)
    {
        for (j=0;j<6;j++)
        {
            sum=sum+array[i][j];
            array[i][5]=sum;
            sum=0;
         }
     }
     for (i=0;i<rows;i++)
     {
        for (j=0;j<6;j++)
        {
            printf("%d",array[i][j]);
         }
         printf("\n");
     }

 }

3 个答案:

答案 0 :(得分:1)

populArray()

for (i=0;i++;i<rows)
{
    for (j=0;j++;j<6)

您已交换条件检查。它应该是

for (i=0;i<rows;i++)
{
    for (j=0;j<6;j++)

注意: 使用main()

的标准定义
int main(void) //if no command line arguments.

答案 1 :(得分:1)

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

永远不会执行,因为条件i++返回false。

应该是

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

同样适用于

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

答案 2 :(得分:0)

首先声明变量avemax但未使用。

int arr[10][6],ave,max;

删除它们。

最好使用命名常量,而不是幻数106。如果编译器支持它们,您可以使用可变长度数组,或者使用#define directice定义常量。例如

#define ROWS 10
#define COLS 6

int main( void )
{
    int arr[ROWS][COLS];
    //...

函数populArray包含无效的循环记录

void populArray (int array[][6],int rows)
{
    int i,j;
    for (i=0;i++;i<rows)
             ^^^^^^^^^^
    {
        for (j=0;j++;j<6)
                 ^^^^^^^^
        //...

我认为你的意思是以下

void populArray( int array[][6], int rows )
{
    int i,j;

    for ( i = 0; i < rows; i++ )
    {
        for ( j = 0; j < 6; j++ )
        {
            printf( "enter %d and %d th elemnt",i,j );
            scanf( "%d", &array[i][j] );
        }
    }
} 

似乎在函数computtotal中,您试图计算一行中所有元素的总和,并将其写入该行的最后一个元素。否则该功能没有多大意义。

如果我是对的,那么该功能可能看起来像

void computtotal( int array[][6], int rows )
{
    int i, j;

    for ( i = 0; i < rows; i++ )
    {
        int sum = 0;

        for ( j = 0; j < 6; j++ )
        {
            sum = sum + array[i][j];
        }

        array[i][5] = sum;
    }

    for ( i = 0; i < rows; i++ )
    {
        for ( j = 0; j < 6; j++ )
        {
            printf( "%d ", array[i][j] );
            //      ^^^^^
        }
        printf( "\n" );
    }
}

根据C标准函数main,不带参数应声明为

int main( void )