首页 > 用户发贴区 > 编程问题提问区 > 请教二维数组的赋值问题!
2008
10-20

请教二维数组的赋值问题!

今天想用自加的方式给二维数组赋值,编译没有错误,但是运行的时候出现NTVDM CPU遇到无效指令的错误.(这个我不知道是不是编译还境的问题.)


源代码如下:


main()


{



int a[3][3],i,j,k=0;


for(i=0;i<=3;i++)


{



for(j=0;j<=3;j++)


{



a[j]=k;


k++;


printf(“%d “,a[ i ][ j ]);


}


printf(“\n”);


}


}


我想得到的结果是


0 1 2 3


4 5 6 7


8 9 10 11


12 13 14 15


运行后的结果是


0 1 2 3


4 5 6 7


8 9 10 12


12 13 14 15


这个我不太明白为什么是i=2,j=3i=3,j=1是出现问题.


我之后又试过五行五列,七行七列,十二行十二列等等也没出现这个问题.


教课书上的赋值大多都是直接赋值的例子.要不就是与i,j有关的赋值方法.


请问这是自加产生的问题,还是数组赋值产生的问题.


还有就是NTVDM CPU遇到无效指令的错误,能否可以给出解释,最好是以汇编的方式给出.


这个学期有汇编语言的课,希望回复中能得到一点启发.




请教二维数组的赋值问题!》有 4 条评论

  1. xstar 说:

    NTVDM CPU遇到无效指令的错误,这个错误在dos程序运行windows下的时候经常出现!没必要研究很清楚!毕竟不同系统上编译的程序,兼容性问题肯定会出现的!

    倒是你程序中的问题很大!

    int a[3][3],i,j,k=0;  // 3*3的数组

    for(i=0;i<=3;i++)< ?:NAMESPACE PREFIX = O />

    {

    for(j=0;j<=3;j++)  // i和j循环了几次,自己算算!

    {

    a[j]=k;        // 这里的赋值自己对照书本看看!

  2. liyuanxun 说:

    我的确是打错了.应该是

    a[i][j]=k;

    但是你说的数组循环的问题我很怀疑你的看法.数组下标是从零开始的这有什么问题.如果我这种方法有错.怎么会出4×4的结果.

    而且这种错误,与我所说的问题没有什么必然的因果关系.

    我想问的是为什么———————-会出现不正常的赋值.是什么因素因起的,是编程的问题还是编译的问题,还是其它什么

  3. yrqtl 说:

    main()

    {

    int a[4][4],i,j,k=0;    //这里应该是a[4][4],因为你下面每个循环语句都是4次的!

    for(i=0;i<=3;i++)

    {

    for(j=0;j<=3;j++)

    {

    a[i][j]=k;

    k++;

    printf(“%d “,a[ i ][ j ]);

    }

    printf(“\n”);

    }

    }

  4. liyuanxun 说:

    是的,是我错了。

    我没仔细看代码,谢谢你的指正。

    我对我的疏忽感到谦意。

    再一次感谢你的指点。

留下一个回复