关于结构体初始化

结构体目前的初始化方法,目前一是创建结构体是一一对应赋值,类似struct={1,2}; 二是通过调用接口memset,或者自定义函数清零。 我曾经在一本书上看到可以通过struct={}清零, 但是在使用过程中不被认可, 在网上也没有相应使用的人。不知道有没有同样看过这本书的人。
提问的目的:struct = {} 这种初始化方式在哪本书上有提到过, 是否合法, 有没有可能产生不可预期的错误。

这个是有原理的。
简单说一下吧:
1.要从数组开始说。
比如int a[10]={0};其实系统只是把第一个数赋值为0,其他的数因为没有参数,系统自动初始化为0,对于int型来说。对于char来说就是‘\0x0’。其他的类型类似。
如果是int a[10]={1};那么就是第一个数是1,其他的数是0。就是1,0,0,0.......
2.下面到结构。结构和数组有点类似;
比如:
typedef struct Text{
int a;
float b;
char c[10];
}text;
如果我写了text temp={1,2,"mmm"};那么就可以正常全部初始化成功,参数符合。
如果我写了text temp1={1};那么就会变成给这个结构固定的参数赋值,这里是给a赋值,其他的参数类似数组全部系统自己初始化。
那么如果写了text temp2={};?就会变成直接全部系统初始化。具体类似于int a[10]={};
参考资料:http://blog.csdn.net/s_k_yliu/article/details/7020746
可以参考代码:
测试平台:Devc++
#include<stdio.h>
#include<math.h>
typedef struct Text{
int a;
float b;
char c[10];
}text;
int main(){
int a[10]={};
int b[10]={0};
int c[10]={1};
int i;
for(i=0;i<10;i++)
printf("%d",a[i]);
printf("\n");
for(i=0;i<10;i++)
printf("%d",b[i]);
printf("\n");
for(i=0;i<10;i++)
printf("%d",c[i]);
printf("\n");
text temp={1,2.0,"shi"};
printf("%d %f %s\n",temp.a,temp.b,temp.c);
text temp1={1};
printf("%d %d %s\n",temp1.a,temp1.b,temp1.c);
text temp2={};
printf("%d %d %s\n",temp2.a,temp2.b,temp2.c);
return 0;
}追问

其实测试结果肯定是已经清零的, 不过如果结构体成员是结构体的初始化,如果还是初始化为{0}, 那么就会报错missing braces around initializer。 初始化为{}是最简单的版本。 但没有在书籍上看到有={}是系统初始化的说明。我已经使用过={}可以初始化任何负责的结构体, 我现在需要的是一个可靠的理论基础,那就是 结构体 ={} 这样初始化时合法的。

追答

报错?你用的什么编译器?
我用的编译器是Devc++5.5.1。
我给你的代码在这里是不会报错的。
如果你报错了,应该是c语言规范版本或者编译器版本问题。
可以去参考c99。
其实我不太懂你的意思。最好贴代码上来,以及写出你的测试平台。如果有输入输出,写出来。
参考我的回答规范。

追问

编译参数不同, 应该算是警告missing braces around initializer。 不需要代码, 你定义一个结构体, 结构体首个成员也是结构体, struct = {0}就会报错。 我不需要纠结这个, 我想知道的其实是struct = {}这种初始化方式, 有没有那本书上明确说明这样做是合法的, 不会出现不可预期的错误。

追答

你在结构体里面加了一个结构体的话,初始化方式肯定就会不同了。
struct={}我也不知道在那本书上面有写。
你要是想知道,就去看《The C++ Programming Language》6.6章。我给你连接上面有提到。
个人理解是可以的。读死书不如不读书。

追问

写代码一定要有理有据,个人理解是不行的, 否则在项目中出现隐蔽性极强的bug, 你哭都来不及。 逻辑可以活用, 但是使用一定得规范。http://down.51cto.com/data/128409。参考微软一站式示例编程规范。

温馨提示:内容为网友见解,仅供参考
第1个回答  2020-10-27
你这里只定义了一个结构体,但是没有示例。应改为:
typedef
struct
{
unsigned
char
bit0
:1;
unsigned
char
bit1
:1;
unsigned
char
bit2
:1;
unsigned
char
bit3
:1;
unsigned
char
bit4
:1;
unsigned
char
bit5
:1;
unsigned
char
bit6
:1;
unsigned
char
bit7
:1;
}ledvalue;
struct
ledvalue
ledval={1,1,1,1,1,1,1,1};
第2个回答  2019-04-22
Data
MyVar1={.ch="c"};
如果该域的值是确定的,可以使用常量。
如果希望给域一个默认值,是行不通的。要设置一个变量,必须有对应的指令,不能凭空改变。在c++中这个过程可以在构造函数中实现,而c则不行。
个人观点,仅供参考!

结构体变量的初始化
结构体变量简称为结构变量,它由结构类型定义,有三种定义方法。下面以定义结构类型 book 和结构变量mybook 、 storybook 为例说明之。1. 先定义结构类型,再定义结构变量。struct book \/* 定义结构体类型 *\/ { char bookname[20];float price;char publisher[20];char author[10];} ;struct ...

c语言结构体初始化
结构体:在C语言中,结构体指的是一种数据结构,是C语言中聚合数据类型的一类。结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构,结构体同时也是一些元素的集合,这些元素称为结构体的成员,且这些成员可以为不同的类型,成员一般用名字访问。

golang | Go语言入门教程——结构体初始化与继承
Go语言提供四种结构体初始化方法。首先,你可以使用`new`关键字,它创建一个结构体的空指针,所有字段默认填充其类型的零值(如int为0,float为0.0,其他结构体为nil)。然而,这种用法并不常见,通常我们会直接通过结构体名称和花括号来初始化。直接使用结构体名称,如果不指定参数,会得到一个零值填充...

关于结构体初始化
如果是int a[10]={1};那么就是第一个数是1,其他的数是0。就是1,0,0,0...2.下面到结构。结构和数组有点类似;比如:typedef struct Text{ int a;float b;char c[10];}text;如果我写了text temp={1,2,"mmm"};那么就可以正常全部初始化成功,参数符合。如果我写了text temp1={1};...

关于结构体变量的初始化的说法不正确的是( )。 单选 为什么? 谢谢...
正确, 事实上 任何变量都是这样的. 只有全局和静态会自动初始化.B. 可以在定义结构体时进行结构体变量的初始化 可以, 定义结构体的时候可以同时定义变量, 并进行初始化.C. 可以在用定义了的类型定义变量时初始化 当然可以, 任何变量定义的时候都可以初始化.D. 定义结构体变量时不可以初始化 错误....

请说明结构体初始化数据赋值的几种方式
1、结构体的构造函数中初始化。2、继承模板类初始化 3、定义时初始化 在C++中,结构体与类在使用上已没有本质上的区别了,所以可以使用构造函数来初始化。如下代码所示:struct Stu { int nNum;bool bSex;char szName[20];char szEmail[100];\/\/构造函数初始化 Stu(){ nNum = 0;bSex = ...

结构体变量初始化问题
i=1;都是初始化语句。比如类A有构造函数A()那么A a();或者 A a;就是对其初始化。同样int i=1;是初始化语句,相当于这样初始化int i(1);可以说是初始化,又可以称为初始化赋值。如果int i;这样写,i的值是上一次栈内存上运行的结果,而不是初始化赋予的值。2.struct{ int a;char b;}...

结构体数组初始化是什么意思?是把该数组里存的数据清空吗?
结构体数组和数组理论上是一样的,初始化是定义变量后的第一次赋值,如不赋值比如说:int x;printf("x=%d\\n",x);输出的会是不可预知的内容,其实我认为初始化就是第一次给变量赋值,赋值可以为空,但不能理解为清空。

C++如何初始化结构体
1 使用构造函数。在C++中,struct可以当做类(class)来使用,同样支持成员函数,构造函数,析构函数。所以可以写对应的构造函数,实现自由初始化。2 定义时,按照成员变量位置,写初始化列表。如struct test中有成员int a, char b, 和float c,那么初始化一个变量可以写作 struct test t1 = {100, '...

如何对结构体变量进行初始化?
方法是在定义变量的同时给其一初始值。结构体变量的初始化,遵循相同的规律。\\x0d\\x0a简单变量的初始化形式如下:\\x0d\\x0a数据类型 变量名=初始化值;\\x0d\\x0a例如,定义整型变量a,并给其初始化值10的语句如下\\x0d\\x0aint a=10;\\x0d\\x0a数组的初始化,需要通过一常量数据列表,对其...

相似回答