今天在网上看到一道C语言题:
char a[2][2][3]={
{
{1,6,3},
{5,4,15}
}, {
{3,5,33},
{23,12,7}
}
};
for(i = 0; i < 12; i++)
printf("%d ", _______);
在空格处填上合适的语句,顺序打印出a中的数字
给出的答案为:a[i/6][(i/3)%2][i%3];
这道题目是多维数组的输出问题,这里要考虑的是每维数字的取值顺序问题:第一维,前六次循环都取0,后六次取1,于是i/6可以满足要求;第二维,前3次为0,再3次为1,再3次为0,再3次为1,用量化的思想,i/3把12个数字分为4组每组3个,量化为0、1、2、3,为要得到0、1、0、1我们这里就需要对(0、1、2、3)%2=(0、1、0、1),于是(i/3)%2;最后一维我们需要的是(0、1、2;0、1、2;0、1、2;0、1、2;)我们就i%3。
个人觉得比较方便的方法可以直接取地址。
各有各的好处,我的这种解法略微投机取巧了一些吧:
#include <stdio.h>
int main(void)
{
int i = 0;
char a[2][2][3]={
{
{1,6,3},
{5,4,15}
}, {
{3,5,33},
{23,12,7}
}
};
for(i = 0; i < 12; i++)
printf("%d ", *(&a[0][0][0]+i));
return 0;
}