能力值:
( LV2,RANK:10 )
|
-
-
2 楼
int ia[10] = {10,10,10,10,10,10,10,10,10,10}
或者是int ia[10] = {0}; //全部是0
|
能力值:
( LV4,RANK:50 )
|
-
-
3 楼
memset可以的吧?
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
memset(ia, *, 10);//
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
2楼正解
|
能力值:
( LV4,RANK:50 )
|
-
-
6 楼
memset(ia,10,10);
|
能力值:
( LV12,RANK:340 )
|
-
-
7 楼
[QUOTE=whnet;1264474]int ia[10] = {10,10,10,10,10,10,10,10,10,10}
或者是int ia[10] = {0}; //全部是0[/QUOTE]
这种的数组小还可以,大的话得写一堆代码。
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
你没看到我第二句么。 写一个0就行了。 全部初始化为0了。
|
能力值:
( LV12,RANK:340 )
|
-
-
9 楼
你的第二句直接写成int ia[10];就行了,C++自动初始化值就是0。
我想要初始化为其它的值,一般要写的数组有几百上千。
不想一个一个定义,也不想for memset复制。
有没有办法修改默认初始值为别的值。
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
[QUOTE=bxc;1264510]你的第二句直接写成int ia[10];就行了,C++自动初始化值就是0。
我想要初始化为其它的值,一般要写的数组有几百上千。
不想一个一个定义,也不想for memset复制。
有没有办法修改默认初始值为别的值。[/QUOTE] int main(int argc, char **argv){
int a[10];
printf("a1:%x, a2:%x\n",a[1], a[2]);
getchar();
} 你去试试这个代码跑出来的效果。 看看是不是自动化初始化为0了。 这也不想那也不想。 那只能换语言了
|
能力值:
( LV12,RANK:340 )
|
-
-
11 楼
[QUOTE=whnet;1264511]int main(int argc, char **argv){
int a[10];
printf("a1:%x, a2:%x\n",a[1], a[2]);
getchar();
} 你去试试这个代码跑出来的效果。 看看是不是自动化初始化为0了。
...[/QUOTE]
你把数组定义在栈上,怎么可能会初始化。我说的是在代码域外定义的。
存储在.data段中的。
#include "stdafx.h"
int iarr[10];
int _tmain(int argc, _TCHAR* argv[])
{
int ibrr[10];
printf("%08X\n", iarr[1]);
printf("%08X\n", ibrr[1]);
getchar();
return 0;
}
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
就算有一种语法能够让整数数组全部初始化为某非零值,那么在编译器层面也会通过某种手段来实现这种机制。
1、对于0、-1等每一字节都相同的数字来说,可以memset
2、对于其他数字来说,可以编码在可执行文件中,程序启动时映射过来
3、最后就是程序自动用循环来赋值
因此就算编码者省事,编译器也不省事,做出来的程序执行的过程和编码者自己写for是一样的----根本的原因是没有这种硬件指令可以直接实现,只能软实现。
|
能力值:
( LV12,RANK:340 )
|
-
-
13 楼
我的意思是代码域外的静态数组,就是存储在.data段中的。必须有初始化值的数组。没初始值就是0的。
|
能力值:
( LV2,RANK:10 )
|
-
-
14 楼
可以用 memset
|
能力值:
( LV3,RANK:20 )
|
-
-
15 楼
int a[100];
int b = 10;
memset(a, b, 100);
|
能力值:
( LV2,RANK:10 )
|
-
-
16 楼
[QUOTE=sunnysab;1264575]int a[100];
int b = 10;
memset(a, b, 100);[/QUOTE]
这样做的结果a里面不是10,而是很大的数字。
memset支持按字节设定值,而非四字节。
|
能力值:
( LV3,RANK:20 )
|
-
-
17 楼
我试试看
|
能力值:
( LV12,RANK:340 )
|
-
-
18 楼
不用试了,因为X86中不能push 1字节,所以Byte一般会被扩展成int
|
能力值:
( LV3,RANK:20 )
|
-
-
19 楼
可以用宏吧
#define REP1(x) x
#define REP2(x) x,x
#define REP3(x) x,x,x
#define REP4(x) x,x,x,x
#define REP5(x) x,x,x,x,x
#define REP6(x) x,x,x,x,x,x
#define REP7(x) x,x,x,x,x,x,x
#define REP8(x) x,x,x,x,x,x,x,x
#define REP9(x) x,x,x,x,x,x,x,x,x
#define REP10(x) x,x,x,x,x,x,x,x,x,x
定义235个元素的数组,初始化为20:
int abc[]={REP2(REP10(REP10(20))),REP3(REP10(20)),REP5(20)};
|
能力值:
( LV12,RANK:340 )
|
-
-
20 楼
好主意
|
能力值:
( LV2,RANK:10 )
|
-
-
21 楼
不行吧,仔细看看,发现这样少“,”,并且这样构造宏麻烦,比如1234,更大的更不好搞了
|
能力值:
( LV3,RANK:30 )
|
-
-
22 楼
mov eax,[ebp-4]
xor eax,eax
|
能力值:
( LV3,RANK:30 )
|
-
-
23 楼
在内存中一般都是4字节对齐的,数组的话一般用到esp-X数,根据你的数组分配的堆栈来大小来决定的。
比如
char a[10]={0};
[esp-0xA] ==相当于你数组开辟了0xA大小的空间
|
能力值:
( LV12,RANK:340 )
|
-
-
24 楼
[QUOTE=网络游侠;1265766]在内存中一般都是4字节对齐的,数组的话一般用到esp-X数,根据你的数组分配的堆栈来大小来决定的。
比如
char a[10]={0};
[esp-0xA] ==相当于你数组开辟了0xA大小的空间[/QUOTE]
不是在栈上的数组
|
能力值:
( LV2,RANK:10 )
|
-
-
25 楼
int a[100];
ZeroMemory(a,100);
|