关于c语言中二维数组的地址问题?

关于c语言中二维数组的地址问题?#include〈stdio.h〉
void main()
{
int i,j,a[3][3];
for(i=0;i<3;i++)
for(j=0;j<3;j++)
printf(“%d”,a[j][i]);
}
上面的例子按照c中按行输出的规定输出格式是
a[0][0],a[1][0],a[2][0]
a[0][1],a[1][1],a[2][1]
a[0][2],a[1][2],a[2][2]
请问a[j][i]的下标变量00 10 20。相对于a[i][j]的下标变量00 01 02。符合c对于数组的定义(按序排列的占用相临存储空间的具有相同类型的变量的集合)吗?如果我要引用a[j][i]中与a[0][0]相临的第二个元素下标的地址,是10 还是01。

C语言多维数组左边下标变化慢,右边快。内存存储越靠右的下标越相邻。追问

这个例子中的问题呢

追答

你的例子想说明什么问题?

追问

我想问在内外循环不变的情况下在输出时,数组a[i][j]变成数组a[j][i],当我想引用a[j][i]数组中a[0][0]的下一个下标变量它是哪一个,如果是a[0][1]那么它是否符合c对数组进行按行存储的规定,如果是a[1][0]那么是否说明c对数组的定义说明(按序排列的)是错误的。

追答

不知道你在说什么,说这些一点意义都没有

追问

我想知道c在这个程序上的运行规则,这样以后才可以更好的运用,如果每次碰到不理解的就放弃,那怎么走的更远,既然你不知道我在说什么,那又为什么说我的问题没意义呢!如果你理解这个问题没意义,是那些没意义呢?如果真的没意义,c上为什么还要把它拿出来讲解呢?是不是说明这个知识的局限性呢

追答

那你说如果你理解了,方便解决什么问题,如果不理解就解决不了的问题。你能举出这个例子么?

追问

首先,我是初学者,可能考虑问题有局限性,思维也许有不符合逻辑的地方,所以我才去理解别人的逻辑来印证自己的逻辑,或者说是c在计算机上的逻辑或者规则,我就是想知道当当上例中数组a[i][j]变成a[j][i]那下标变量是按00 01 02 10 11 12 20 21 22这样排序还是按00 10 20 01 11 21 02 12 22这样排序。

追答

只要你是用下标来访问,内部怎么存储就毫无关系。

追问

前辈,我还有个困惑,是关于输入输出的,还希望能解惑下。

scanf()函数输入问题比如下面的例子:#include〈stdio.h〉
void main()

int i,j,a[3][3];
for(i=0;i<3;i++)
for(j=0;j<3;j++)
if((i+j)%2)
printf(“%d”,a[i][j]);

请问可以把 printf(“%d”,a[i][j]);换成scanf(“%d”&a,[i][j])吗?为什么?

换成scanf(“%d”,&a[ij][])

换成scanf(“%d”,&a[i][j])

追答

不能。下标完全变了。而且多半越界。

追问

她是全部输入a[0][0]到a[2][2]的值,还是会经过if((i+j)%2)这个单分支选择结构的语句限制后输出部分

越界是指的什么?我是初学者不懂这些术语

追答

两个坐标加起来为偶数,没有什么特定意义,不值得讨论。

追问

它会限制输出吗

它会限制输入吗

输出我打错了是输入

追答

会限制输出,筛选两个下标和为偶数的

追问

因为高度不同,条件不同,所以前辈认为的没意义对我来说还是很有意义的。不论怎样谢谢了,我在蹭网,很冷的,不聊了。

会限制输入吗?

温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-11-27
01,00的下一个就是01是先行后列排序的追问

可在a[j][i]中先行是00 10 20 01 11 21 02 12 22

相似回答