在c中打印二维数组

时间:2015-05-06 18:11:05

标签: c arrays

我试图通过最初定义5 x 2矩阵的元素来定义二维数组,然后我再次定义第6行的元素。但是当我尝试打印这个矩阵的元素时,我得到0和5代表最后一个值。通过为第4行或第6行再次定义元素来尝试相同但是它正常工作。

#include<math.h>
#include<stdio.h>
main()
{
  int arr[ ][2]={{11,12},{21,22},{31,32},{41,42},{51,52}};
  int i, j;
  arr[5][0]=61; arr[5][1]=62;
  for (i=0;i<=5;i++)
  {
    for (j=0;j<=1;j++)
    {
      printf ("%d \n", arr[i][j]);
    }
  }
}

1 个答案:

答案 0 :(得分:3)

为初始化数组提供足够的内存以保存指定的数据值。所以

int arr[ ][2]={{11,12},{21,22},{31,32},{41,42},{51,52}};

将数组创建为int arr[5][2],然后创建

arr[5][0]=61; arr[5][1]=62;

超出数组范围。最大索引为[4][1],因为数组索引基于0。如果要添加其他元素,则应指定

int arr[6][2]={{11,12},{21,22},{31,32},{41,42},{51,52}};

然后这一行就可以了。

arr[5][0]=61; arr[5][1]=62;

另一种方法是使用malloc()为数组分配内存,然后如果要添加另一行,可以使用realloc(),这将显示如何创建一个灵活的数组。 / p>

#include <stdio.h>
#include <stdlib.h>

#define COLUMNS 2
#define ROWS 5

typedef int rowtype[COLUMNS];

int main() {
    int i, j;
    rowtype *array = malloc(ROWS * sizeof(rowtype));
    if (array == NULL)
        return -1;

    for (j=0; j<ROWS; j++)
        for (i=0; i<COLUMNS; i++)
            array[j][i] = (j+1)*10 + (i+1);

    for (j=0; j<ROWS; j++) {
        for (i=0; i<COLUMNS; i++)
            printf ("%-4d", array[j][i]);
        printf ("\n");
    }

    printf("Add another row\n");
    array = realloc(array, (ROWS+1) * sizeof(rowtype));
    if (array == NULL)
        return -1;
    array[ROWS][0] = 61;
    array[ROWS][1] = 62;

    for (j=0; j<ROWS+1; j++) {
        for (i=0; i<COLUMNS; i++)
            printf ("%-4d", array[j][i]);
        printf ("\n");
    }

    free(array);
    return 0;
}

节目输出:

11  12
21  22
31  32
41  42
51  52
Add another row
11  12
21  22
31  32
41  42
51  52
61  62