我正在尝试实现这个简单的代码(没有算法)。
#include<stdio.h>
#include<stdlib.h>
int main()
{
int l,h1,h2,h3,i,j,t,m,n;
scanf("%d %d",&m,&n);
int A[m][n];
for(i=1;i<=m;i++)
{
for(j=1;j<=n;j++)
scanf("%d",&A[i][j]);
}
int n1=m*n;
int adj[n1][n1];
printf("Before initialization array A =\n");
for(i=1;i<=m;i++)
{
for(j=1;j<=n;j++)
printf("%d ",A[i][j]);
printf("\n");
}
for(i=1;i<=n1;i++)
{
for(j=1;j<=n1;j++)
adj[i][j]=-1;
}
printf("After initialization array A =\n");
for(i=1;i<=m;i++)
{
for(j=1;j<=n;j++)
printf("%d ",A[i][j]);
printf("\n");
}
return 0;
}
这是我的输入文件 -
4 3
2 3 2
2 5 1
5 3 1
3 1 1
所以这里前两个元素是m,n,即没有行和列。然后m行有n个元素。我将这些元素存储在一个二维数组A
中。然后我打印出这个数组。它给出了正确的答案。然后我正在创建新的adj[m*n][m*n]
。我将这个数组初始化为-1
。之后我打开我的A
数组前五A
的元素也变为-1。我没有改变A
的值。所以为什么会发生这种情况。这是我得到的输出 -
Before initialization array A =
2 3 2
2 5 1
5 3 1
3 1 1
After initialization array A =
-1 -1 -1
-1 -1 1
5 3 1
3 1 1
答案 0 :(得分:2)
C使用基于0的索引。因此,数组的有效索引从0开始,以长度-1结束。
这意味着您必须修改循环。这样:
for(i=1;i<=m;i++)
并且需要
for(i=0;i<m;i++)
您需要对所有其他循环执行相同操作。否则,您将访问无效的数组索引,这会导致未定义的行为。
答案 1 :(得分:1)
您需要知道的是,在C / C ++数组中,从0开始到数组长度为-1。在for loops
中更改此内容并查看会发生什么