将数组传递给函数

时间:2013-11-11 10:33:09

标签: c arrays function

我正在尝试将用户从scanf( "%d", &ar[rows][cols] );输入的值输入到int变量temp中。

但不知何故,当我执行时,它会在printf( "Please enter 9 positive integers : " );

之后立即给出错误

编辑:我忘了包含代码。以下是代码:

/* File: StudentID_Surname.c  - e.g. 1234567_Wilson.c
 * This program finds the range between highest and lowest value of a 2-D array */

#include <stdio.h>

#define NROW 3
#define NCOL 3

/* Write a function
     void disp_arr(int a[NROW][NCOL]) { ... }
    where a[][] is the 2-D array
    Print the entire array to the screen. */

disp_arr( temp );

int main(void)
{
    /* declare needed variables or constants, e.g. */
    int ar[NROW][NCOL];
    int rows, cols, temp;

    /* prompt for the user to enter nine positive integers to be stored into the array */

    for ( rows = 0 ; rows < 3 ; rows++ )
    {
        for ( cols = 0 ; cols < 3 ; cols++ )
            {
                printf(  "Please enter 9 positive integers : " );

                scanf( "%d", &ar[rows][cols] );

                temp = disp_arr(ar[rows][cols]);

                printf( "%d\t", temp );
            }
        printf("\n");
    }

}/* end main */

disp_arr( int temp )
{
    int x,y;
    int a[x][y];

    printf( "%d", a[x][y] );

    return a[x][y];
}

我的错误在哪里?

3 个答案:

答案 0 :(得分:1)

这是一个大问题:

int x,y;
int a[x][y];

定义局部变量时,默认情况下不会初始化它们。相反,它们的值是不确定的,在未初始化时使用这些值会导致未定义的行为。

您还应该收到许多编译器警告,甚至是错误(例如全局范围内的disp_arr( temp );函数调用)。

此外,即使未声明的函数隐含返回int,您仍应始终指定它。

答案 1 :(得分:0)

如果ar是指针,则您不必在&中使用scanf。您可以使用&告诉scanf您希望存储从控制台读取的值的地址。但是,在指针的情况下,指针已经包含要在其中存储读取值的数据结构的地址。 ar[rows][cols]本身会转换为地址,因此您无需在其中添加&

答案 2 :(得分:0)

另外,请勿将用户输入与打印混淆。它在那个评论中说该函数应该做什么以及它的原型应该是什么样子。所以只要做它说的话。如果从代码中删除用户输入,然后将已经写入的代码移动到该函数中,则得到:

void disp_arr (int a[NROW][NCOL])
{
  for (int rows=0; rows<NROW; rows++)
  {
    for (int cols=0; cols<NCOL; cols++)
    {
      printf("%d ", a[rows][cols]);
    }
    printf("\n");
  }
}