C语言关于多维数组的问题;字幅有限;请看问题补充;谢谢了

【main()
{
int array[3][3]={1,2,3,4,5,6,7,8,9};
int i,j;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++) printf(%3d);
printf(\n);
}
}
它的输出结果为:
1 2 3
4 5 6
7 8 9
可以看出,二维数组元素是按行存储的。】
关于数组它具体是怎么输出输入的呢?
是一维数组先输入 / 输出 还是多维的先输出 / 输入的呢?
具体是怎么输出输入的呢?
能详细说一下吗

数组的输入输出格式不是固定的,是要自己具体定义的,也就是说,既可以按行输出,也可以按列输出,也可以按对角线输出~~~等等,当然,它的确是按行存储的,由上至下先存储完第一行的所有元素,接着再存储下一行的所有元素,你举的程序例子是按行输出的,但就像楼上所说的,是无法通过编译的,因为你没有指明你要输出的数组元素,编译器是会报错的,把这个语句printf(%3d);换成printf("%3d",a[i][j]);就可以了~~~追问

main()
int array[3][3]={1,2,3,4,5,6,7,8,9};
int i j;
{
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)printf(%3d,a[i][j]);
printf(\n);
}
}

我编写之后它还是说有俩个错误.......

追答

额。。。"%3d"要加引号,还有"\n"也要加引号,还有,如果你main函数前面没有类型声明的话,最后程序的结尾处还要加上return 0;
#include
main()
int array[3][3]={1,2,3,4,5,6,7,8,9};
int i j;
{
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)printf("%3d",a[i][j]);
printf("\n");
}
return 0;
}

追问

是我的编译器有问题吗?

追答

额。。。看错了,数组名还没改过来~~~把第一个printf里面的a[i][j]改成array[i][j]~~~数组名要对应,当时忘改了,你再试试~~

温馨提示:内容为网友见解,仅供参考
第1个回答  2011-04-16
兄弟,你的程序绝对通不过编译的,你可以先测试下。
至于说你说的按行存储的,我觉得更可能是溢出了。谢谢。追问

你好 我编写后真的不行,但为什么说它会溢出呢?

第2个回答  2011-04-16
二维数组的存储在内存里面其实还是一个一维数组,只是它们之间有一个转换,例如你那一个3*3的数组,a[i][j]=a[i*3+j],就这样,至于你那每行之间有一个换行,只是人为的规定而已
第3个回答  2011-04-16
不管一维数组还是二维数组存储上边没区别的,,,只不过是人为的加上标签,他们的都是挨着的。
比如说int a[3][3] 与 int a[9]
你可以打印每个数组元素的地址是看下,绝对都是挨着的。
打印地址的方式:
printf(" ########%p\n", &a[j][i]); /*二维数组*/
打印一维数组元素地址的方式:
printf("**************%p\n", &a[i]);

至于你的程序有么有错,,,就没细看了,,,不是你问题重点追问

亲 你多说一些也可以的.......我不追究的

追答

这个,,,,,可以
不过带泪的紫藤花都把程序给你修改的那么明白了,,,我还有什么好说的?不过我倒是不太明白你问题的意思。。。。
“是一维数组先输入 / 输出 还是多维的先输出 / 输入的呢?”这句话是何意?

首先,,,书上教导我们,,,二维数组一般都是按行存储的。。。所以才有你这个问题。。。。
你的二维数组它输出的时候是部分一维二维的,,,,它就是按顺序输出的,,,,懂?
不是让你打印地址看下了么?懂?都是连续的。计算机存储是不会给你分一维二维三维的


Warning: Invalid argument supplied for foreach() in /www/wwwroot/aolonic.com/skin/templets/default/contents.html on line 45
相似回答