C++语言的数组初始化

来源:百度知道 编辑:UC知道 时间:2024/09/20 07:24:13
typedef struct _test
{
int a;
char b[2];
}test,*ptest;

int _tmain(int argc, _TCHAR* argv[])
{
ptest mytest=new test;
mytest->a =1;
mytest->b[2] = {0}; //出问题的地方

return 0;
}
我想把数组b初始化为0,可编译器老报错,请问怎么初始化这个数组b,我就要在堆里初始化这个数组(用new 建立的指针去初始化)
谢谢各位~ windows里的话用ZeroMemory因该没错哦???

mytest->b[2] = {0};
这种由大括号包围的初始化列表形式的初始化只适合与声明并初始化的时候,而且只能是POD类型有效。
比如:
int a[10] = {1,2,3};
这样不行:
int a[10];
a[10] = {1,2};
这样就是错误的。

如果你需要编译器自动的为其置0的话就不要用结构体了,用类吧,在类的构造函数中干这种事情。

如果你非要用结构体,那么初始化为0可以考虑使用C库的memset。注意,别用strcpy,它做不到。

越界了呗,
mytest->b[2]的意思是对b这个数组的第三个元素赋值为0,(下标是从0开始应该知道把)但是数组b中总共之有两个元素的空间。

你要把数组中所有的值赋0 应该这么写

mytest->b[0]=0;
mytest->b[1]=0;

typedef struct mytype{
int x;
}
mytype x={0};
mytest->b[2]=x;
汗,没看char b[2]; 这句,见二楼好了

应当是b[0],b[1]=0吧。
mytest->b[2] = {0}; //出问题的地方

怎么能把数字赋给字符数组呢?结构体里定义的是字符数组,而函数里进行赋值的是整型数组。

b是字符型的数组,你这样赋值是非法的,你应该像这样初始化
strncpy(b,"0")