struct的{}用法,该怎么解决
struct的{}用法
定义一个struct
struct A
{
int a;
int b;
};
就经常这样初始化A a = {0};
但发现有的结构体不能初始化,不知为什么?谁知道这个过程到底调用了什么?
------解决方案--------------------
貌似你应该这么写。struct A a = {0};
------解决方案--------------------
我才学C++ 时间不长。
当学到 类 的时候,我就把结构体给忘了。
我记得好像是用 for循环 的吧,不太清楚了
------解决方案--------------------
A a = {0};
相当于两步
A a;
memset(&a,0,sizeof(a));
------解决方案--------------------
虽然结果是如此,过程并非如此。第一个会用0赋值,A.a=0;第二个会用NULL赋值:A.b=NULL.
这个例子里面的0和Null 刚好一样而已。
看下面的链接
http://en.cppreference.com/w/cpp/language/aggregate_initialization
------解决方案--------------------
c++可以 A a = {0}这么写,c才需要加struct
------解决方案--------------------
即使结构体中都是基础类型的成员,A a={0}这样的初始化话也是不正确的。
这种初始化仅仅是把a变量设置为了0,而未对b变量做初始化。
大部分人可能是受到数组初始化的影响。数组是可以这么初始化的,而且初始化的值只能是0!
对结构体的初始化,可以有一下三种:
------解决方案--------------------
如果你想初始化一个结构体让所有的成员变量对应的值为相应类型的空值你应该这么做
A a {};或者A a = {}都行。
我觉你你要探究他底层的机制的话,应该和C++类里面的构造函数差不多,你可以潜在认为结构体里面也有一个默认构造函数。
另外c语言定义结构体要加struct,c++不用,一楼说法有问题
定义一个struct
struct A
{
int a;
int b;
};
就经常这样初始化A a = {0};
但发现有的结构体不能初始化,不知为什么?谁知道这个过程到底调用了什么?
------解决方案--------------------
貌似你应该这么写。struct A a = {0};
------解决方案--------------------
我才学C++ 时间不长。
当学到 类 的时候,我就把结构体给忘了。
我记得好像是用 for循环 的吧,不太清楚了
------解决方案--------------------
A a = {0};
相当于两步
A a;
memset(&a,0,sizeof(a));
------解决方案--------------------
虽然结果是如此,过程并非如此。第一个会用0赋值,A.a=0;第二个会用NULL赋值:A.b=NULL.
这个例子里面的0和Null 刚好一样而已。
看下面的链接
http://en.cppreference.com/w/cpp/language/aggregate_initialization
------解决方案--------------------
c++可以 A a = {0}这么写,c才需要加struct
------解决方案--------------------
即使结构体中都是基础类型的成员,A a={0}这样的初始化话也是不正确的。
这种初始化仅仅是把a变量设置为了0,而未对b变量做初始化。
大部分人可能是受到数组初始化的影响。数组是可以这么初始化的,而且初始化的值只能是0!
对结构体的初始化,可以有一下三种:
#include<stdio.h>
struct A
{
int a;
int b;
};
int main()
{
A a1 = {0, 0};
A a2 = {
.a=2,
.b=3
};
A a3 = {
a:123,
b:456
};
printf("a1.a = %d, a1.b = %d\n", a1.a, a1.b);
printf("a2.a = %d, a2.b = %d\n", a2.a, a2.b);
printf("a3.a = %d, a3.b = %d\n", a3.a, a3.b);
return 0;
}
------解决方案--------------------
如果你想初始化一个结构体让所有的成员变量对应的值为相应类型的空值你应该这么做
A a {};或者A a = {}都行。
我觉你你要探究他底层的机制的话,应该和C++类里面的构造函数差不多,你可以潜在认为结构体里面也有一个默认构造函数。
另外c语言定义结构体要加struct,c++不用,一楼说法有问题