如何用一个循环实现多维数组的输出

anison 2008-11-21 05:02:10
前段时间的一个笔试题,突然记起来,想问一下,谢谢
...全文
272 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
wzfxyer 2008-11-21
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 anison 的回复:]
引用 2 楼 lunarfan 的回复:
比如x[3][4]
for (i=0; i <12; i++)
{
输出
}


受到启发,这样应该也行
int a[3][4];
....
for (int i = 0; i < 12; i++)
{
cout < <a[i/4][i%3] < <endl;

}

楼上的也都可以,呆会回去试试
[/Quote]
呵呵!
Lnnu_lc 2008-11-21
  • 打赏
  • 举报
回复
我觉得6楼的方法应该是最直观的,9楼的方法应该是最效率的,顶了
bfhtian 2008-11-21
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lunarfan 的回复:]
多维数组也是连续的。所以可以用一个for循环
[/Quote]
up
bfhtian 2008-11-21
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lunarfan 的回复:]
多维数组也是连续的。所以可以用一个for循环
[/Quote]
up
牧夜 2008-11-21
  • 打赏
  • 举报
回复
连续的存储的空间
顺序访问就可以了
lunarfan 2008-11-21
  • 打赏
  • 举报
回复
上界sizeof(a)/sizeof(a中第一个元素)应该这样更容易维护
lunarfan 2008-11-21
  • 打赏
  • 举报
回复
是的这样更好sizeof(a)/sizeof(类型)
就呆在云上 2008-11-21
  • 打赏
  • 举报
回复
这样用指针的偏移
数组在内部是连续的地址空间:
int main(void)
{
int a[3][4] = {1,2,3,4,5,6,6,7,8,9,11,22};
for(int i = 0; i < sizeof(a)/sizeof(a[0][0]); i++)
printf(" %d ", *(*a+i) );
return 0;
}
霍大脚 2008-11-21
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 anison 的回复:]
引用 2 楼 lunarfan 的回复:
比如x[3][4]
for (i=0; i <12; i++)
{
输出
}


受到启发,这样应该也行
int a[3][4];
....
for (int i = 0; i < 12; i++)
{
cout < <a[i/4][i%3] < <endl;

}

楼上的也都可以,呆会回去试试
[/Quote]

如果是这样呢,int a[][3]={1,2,3,4,5,6,7,8,9};
你4哪里来啊,直接while(j<sizeof(a)/sizeof(int))
不是更好,更专业。
机智的呆呆 2008-11-21
  • 打赏
  • 举报
回复

#include<iostream>
using namespace std;

int main()
{
int a[2][2][2]={1,2,3,4,5,6,7,8};
int *q=(int*)a;
for (int i=0;i<8;i++)
{
cout<<q[i]<<endl;
}
system("pause");


}

既然都知道数组在内存连续了
anison 2008-11-21
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 lunarfan 的回复:]
比如x[3][4]
for (i=0; i <12; i++)
{
输出
}
[/Quote]

受到启发,这样应该也行
int a[3][4];
....
for (int i = 0; i < 12; i++)
{
cout<<a[i/4][i%3]<<endl;

}

楼上的也都可以,呆会回去试试
霍大脚 2008-11-21
  • 打赏
  • 举报
回复
return 0; 那里给过去几个格了。。
霍大脚 2008-11-21
  • 打赏
  • 举报
回复

//用do-while循环可以实现,充分利用数组首地址。。。
#include <iostream>
int main()
{
using std::cout;
using std::endl;
int a[3][3]={1,2,3,4,5,6,7,8,9};
int j=0;
do
{
cout<<*(a[0]+j)<<' ';
j++;
}
while(j<sizeof(a)/sizeof(int));
return 0;
}
程序结果:1 2 3 4 5 6 7 8 9 请按任意键继续. . .
一个行别的也行,用while循环的话,先在循环外输出j=0这种情况。
霍大脚 2008-11-21
  • 打赏
  • 举报
回复

//用do-while循环可以实现,
#include <iostream>
int main()
{
using std::cout;
using std::endl;
int a[3][3]={1,2,3,4,5,6,7,8,9};
int j=0;
do
{
cout<<*(a[0]+j)<<' ';
j++;
}
while(j<sizeof(a)/sizeof(int));
return 0;
}
lunarfan 2008-11-21
  • 打赏
  • 举报
回复
比如x[3][4]
for (i=0; i<12; i++)
{
输出
}
lunarfan 2008-11-21
  • 打赏
  • 举报
回复
多维数组也是连续的。所以可以用一个for循环

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧