通过使用参数2d数组调用函数print_array来打印2d数组

时间:2012-01-03 16:08:13

标签: c arrays multidimensional-array

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define length 100

void print_array();

int main()
{
    int m,n,i,j;
    int A[length][length];
    printf("Give dimensions of array (up to 100x100):\ni:\n");
    scanf("%d",&i);
    printf("j:\n");
    scanf("%d",&j);
    srand(time(NULL));
    for (m=0;m<i;m++)
    {
        for (n=0;n<j;n++)
        {
            A[m][n]=rand()%45+1;
            printf("A[%d,%d]=%d\n",m,n,A[m][n]);
        }
    }
    print_array(i,j,A);
    return 0;
}

void print_array(int i,int j,int A[][j])
{
    printf("\n");
    int m,n;
    for (m=0;m<i;m++)
        {
            for (n=0;n<j;n++)
            {
                printf("A[%d,%d]=%d\n",m,n,A[m][n]);
            }
        }
}

您好。我试图通过调用函数print来打印2d数组,但是当我运行程序时,我得到:

对于第一个printf()正确的值:

A[0,0]=25
A[0,1]=19
A[0,2]=13
A[1,0]=4
A[1,1]=17
A[1,2]=43
A[2,0]=7
A[2,1]=37
A[2,2]=20

但是当我在printf()的函数调用中使用第二个print_array时,我得到了:

A[0,0]=25
A[0,1]=19
A[0,2]=13
A[1,0]=0
A[1,1]=0
A[1,2]=0
A[2,0]=0
A[2,1]=0
A[2,2]=0

好像我想念指针......谢谢。

7 个答案:

答案 0 :(得分:2)

这是C99,对吧?

问题是你混淆了数组大小。

主程序有int A[length][length],但是您调用最终维度A[][j]的动态大小的函数。如果j != length,则函数将错误地索引数组。

我建议将函数调用中的数组表示为指向第一个元素的裸指针,并手动执行索引:

void print_array(const int *A, size_t width, size_t height)
{
  for(size_t i = 0; i < height; ++i)
  {
    for(size_t j = 0; j < width; ++j)
      printf("A[%zu][%zu] = %d\n", i, j, A[i * width + j]);
  }
}

答案 1 :(得分:0)

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <time.h>
#define length 100

void print_array(int i,int j,int A[length][length]);

int main()
{
    int m,n,i,j;
    int A[length][length];
    printf("Give dimensions of array (up to 100x100):\ni:\n");
    scanf("%d",&i);
    printf("j:\n");
    scanf("%d",&j);
    srand(time(NULL));
    for (m=0;m<i;m++)
    {   
        for (n=0;n<j;n++)
        {   
            A[m][n]=rand()%45+1;
            printf("A[%d,%d]=%d\n",m,n,A[m][n]);
        }   
    }   
    print_array(i,j,A);
    return 0;
}

void print_array(int i,int j,int A[length][length])
{
    printf("\n");
    int m,n;
    for (m=0;m<i;m++)
        {   
            for (n=0;n<j;n++)
            {   
                printf("A[%d,%d]=%d\n",m,n,A[m][n]);
            }   
        }   
}

除上述内容外,您还需要对维度(ij)进行一些输入验证。它们不应超过length。如果它超过length那么你会遇到问题。

答案 2 :(得分:0)

void print_array(int i,int j,int A[][j])

应该是

void print_array(int i,int j,int A[][length])

当您告诉编译器实际数组的维度与您之前指定的维度不同时,它会访问错误的元素。 A总是100x100,你只是不填写所有内容。

答案 3 :(得分:0)

您需要在函数签名中定义数组int A[][]的大小。请改用此功能:

void print_array(int i,int j,int A[length][length])
{
    printf("\n");
    int m,n;
    for (m=0;m<i;m++)
        {
            for (n=0;n<j;n++)
            {
                printf("A[%d,%d]=%d\n",m,n,A[m][n]);
            }
        }
}

答案 4 :(得分:0)

你已经将A声明为int A [length] [length],但是在print_array函数中你将其声明为A [] [j],这意味着在你的函数A中有一个不同数量的colones导致这个错误。

更改此行

void print_array(int i,int j,int A[][j])

这一个

void print_array(int i,int j,int A[][length])

http://www.cplusplus.com/doc/tutorial/arrays/

答案 5 :(得分:0)

首先,您应该使用正确的原型

转发声明您的函数
void print_array(int n,int m, int A[n][m]);

然后使用正确的尺寸

print_array(length, length, A);

除此之外:

  • 使用size_t代替int
  • 通常的命名惯例以ij为索引,nm 作为尺寸。坚持这样的约定使得代码更易于阅读。

答案 6 :(得分:0)

array and matrix printing functions are little similar but tricky.. but i have worked on it and found out some thing and i think it will be useful for all here is a simple C code for Function for printing matrix

#include<stdio.h>
void printmatrix(int l,int x,int y,int *p_arr);
void putvalue(int l,int x,int y,int *r_arr);
/*  ******** Function to insert some random value in to a Matrix ************ */
void putvalue(int l,int x,int y,int *r_arr)
{
  int i,j;
  for(i=0;i<x;i++)
  {
    for(j=0;j<y;j++)
    {
        r_arr[(l*i)+j]=i+j+10;
    }
  }
}
/* *********Function to Print any Matrix ********** */
void printmatrix(int l,int x, int y,int *p_arr)
{
  int i,j;
  printf("\n");
  for(i=0;i<x;i++)
  {
    printf("\n");
    for(j=0;j<y;j++)
    {
        printf(" %d",p_arr[(l*i)+j]);
    }
  }
}
/* ****** Main ****** */
void main()
{
  int i,j,l;
  int Big_arr[80][100],Small_arr[20][40];   

     //  ****** I have taken two different size arrays  *****

  int x,y;
  clrscr();
  printf("\n Enter x and y values under 20X40:"); // Because of screen size of Output
  scanf("%d %d",&x,&y);
  if((x!=0)&&(y!=0))
  {
    printf("\n %dX%d",x,y);

    l=sizeof(Big_arr[0])/sizeof(Big_arr[0][0]);  // **** l is the length of a single row of matrix
    putvalue(l,x,y,(int*)Big_arr);
    printf("\n Printing Big_arr");
    printmatrix(l,x,y,(int*)Big_arr);


    l=sizeof(Small_arr[0])/sizeof(Small_arr[0][0]);
    putvalue(l,x,y,(int*)Small_arr);
    printf("\n Printing Small_arr");
    printmatrix(l,x,y,(int*)Small_arr);
  }
  else
    printf("\n ***** Enter valied x and y values *****");
  getch();

}

hope u like it.