一个关于效率的问题

free131 2005-03-17 09:09:32
为一个二维数组的每一位赋值,我们一般这样做:

int a[1000][1000];
for(int i = 0; i < 1000; i++)
for(int j = 0; j <1000; j++)
a[i][j] = 10;

有没有效率更高的赋值方法呢,请教.............
...全文
145 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
suyouxin 2005-03-18
  • 打赏
  • 举报
回复
放到静态区去
suyouxin 2005-03-18
  • 打赏
  • 举报
回复
int a[1000][1000];
memset(a, 0x00, sizeof(a));

char *p = (char*)a;
for (int i = 0; i < 250000 ; i++) {
p += sizeof(int)/sizeof(char);
*p = 10;
}
原来的1/4哈
还有,没这么大的栈
suyouxin 2005-03-18
  • 打赏
  • 举报
回复
汗,看成char了
gameboy007 2005-03-18
  • 打赏
  • 举报
回复
union fmt {
__int64 b;
int a[2];
};
fmt tmp;
tmp.a[0] = tmp.a[1] = 10;
int a[1000][1000];
fmt* begin = (fmt*)a;
fmt* end = begin + 500000; // 1000 * 1000 / 2
while (begin != end)
{
*begin++ = tmp;
}
free131 2005-03-17
  • 打赏
  • 举报
回复
应该还有更好的方法吧,持续等待中...............
pcboyxhy 2005-03-17
  • 打赏
  • 举报
回复
memset(a, 10, sizeof(a));
是按照字节的
不能这样初始化。
hardeggwang 2005-03-17
  • 打赏
  • 举报
回复
int a[1000][1000]={0};

//1000*1000的数组恐怕在运行的时候会造成问题吧,有这么大的堆栈么?

这样做的结果是所有的这个数组的所有元素都是0
但int a[1000][1000]={10}只能使第一个元素为10,其余还是为0
可以以后应用的时候,每个元素加10,相当于现在的赋值为10
不知道这能否满足你的需要

suyouxin 2005-03-17
  • 打赏
  • 举报
回复
memset(a, 10, sizeof(a));

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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