c语言字符串数组初始化为0,结构体中对字符数组初始化为0的问题

7e9c87c6fe81da60d37559bcc16c7d82.png

很简单的一行代码,为什么就会报错呢?

3d83e82edc3de088b5d6cdef679ef93d.png

不在结构体中就没有问题

66556daf9963cf1cb577dc8fa310a453.png

这是错误信息

解决方案

5

简单说,就是不允许。

复杂的说呢,那就是猜了:

不在结构体里面的时候,不管是局部变量还是全局变量,编译器都要立即给他分配空间。分配了空间之后明确的知道这个变量的位置,那么顺便清0也可以做到。

在结构体里面,只是声明了一个类型而已,想清0也不知道该去哪清。当然你可以说真正定义变量的时候再清0,那就有点象c++构造函数的概念了,c大致是不行吧

1

5

C语言中不允许这么做,在结构体里面和外面赋值是完全不同的概念

外面定义的,无论是局部变量还是全局变量,都是有内存被分配的,初始化就是初始化那块儿内存

而结构体本身的定义并不分配内存,只有定义结构体变量时才会分配内存,所以在里面的初始化语句并不是在编译结构体定义时起作用,而是要等到用结构体定义变量时才起作用,所以就显得不那么“自然了”,所以C就没有支持这种方法

C++中先是用构造函数的方法给出了一种折衷手段,但也不允许直接初始化,而是用一个函数来完成你要的初始化工作,原因同上,就是为了避免写的代码和底层操作“不协调”

后来到C++11,可能是为了方便程序员,标准也开始支持这种类内直接初始化了

顺便说一下,Java是支持的,C++“抄袭”了Java也不是没有可能

5

每种语言,都有他的哲学,甚至有些库也有,例如STL

并且随着版本的不同,不断的修改,完善

早期,C 语言的哲学是尽量简单,贴近硬件,贴近汇编

包括写成的语句,和语言内核本身

当时C是关键字最少的语言

当时提倡代码简短,标识符名字尽量的简短(哦,那个时代,编程语言,普遍只能识别8个字符)

这点,可以从C标准库看出来

当然。编译器实现起来,也要尽量简单

当时,自动数组都不能初始化

结构内的数组。自然也不能初始化了

2

支持C++11编译器可以,例如VS2015

否则可以在构造函数里本人初始化为0

3

莫非你可以对 那个 top 赋值吗?

也是不可以的。

你那个不是定义变量,而是定义了一个类型。

不过最新的 C++ 就可以了。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明结构体中对字符数组初始化为0的问题!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值