关于结构体初始化

结构体目前的初始化方法,目前一是创建结构体是一一对应赋值,类似struct={1,2};二是通过调用接口memset,或者自定义函数清零。我曾经在一本书上看到可以通过st... 结构体目前的初始化方法,目前一是创建结构体是一一对应赋值,类似struct={1,2}; 二是通过调用接口memset,或者自定义函数清零。 我曾经在一本书上看到可以通过struct={}清零, 但是在使用过程中不被认可, 在网上也没有相应使用的人。不知道有没有同样看过这本书的人。
提问的目的:struct = {} 这种初始化方式在哪本书上有提到过, 是否合法, 有没有可能产生不可预期的错误。
展开
 我来答
擦擦设置
推荐于2017-09-19 · TA获得超过148个赞
知道小有建树答主
回答量:46
采纳率:0%
帮助的人:65.1万
展开全部
这个是有原理的。
简单说一下吧:
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。
其实我不太懂你的意思。最好贴代码上来,以及写出你的测试平台。如果有输入输出,写出来。
参考我的回答规范。
上海华然企业咨询
2024-10-21 广告
上海华然企业咨询有限公司专注于AI与数据合规咨询服务。我们的核心团队来自头部互联网企业、红圈律所和专业安全服务机构。凭借深刻的AI产品理解、上百个AI产品的合规咨询和算法备案经验,为客户提供专业的算法备案、AI安全评估、数据出境等合规服务,... 点击进入详情页
本回答由上海华然企业咨询提供
牟寰蔺醉香
2020-10-27 · TA获得超过1340个赞
知道小有建树答主
回答量:1202
采纳率:100%
帮助的人:5万
展开全部
你这里只定义了一个结构体,但是没有示例。应改为:
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};
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
捷冰时蕴涵
2019-04-22 · TA获得超过1156个赞
知道小有建树答主
回答量:1210
采纳率:100%
帮助的人:5.1万
展开全部
Data
MyVar1={.ch="c"};
如果该域的值是确定的,可以使用常量。
如果希望给域一个默认值,是行不通的。要设置一个变量,必须有对应的指令,不能凭空改变。在c++中这个过程可以在构造函数中实现,而c则不行。
个人观点,仅供参考!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式