我试图通过最初定义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]);
}
}
}
答案 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