关于数组、结构体的初始化、赋值、拷贝

数组有如下用法:
例如: int name[10]={0};
作为右值:name本身可以作为数组首元素的地址,等同于&name[0],取数组第一个元素的地址。可以明确的是,name即使有意义,也是作为指针存在,而不是代表整个数组
作为左值:name不能作为左值。有的资料说,不能作为左值,是因为name作为左值,是表示一个完整的内存,但这个完整内存不允许整体访问,只能访问内里的一个个小单元,所以,数组名不能作为左值;
        具体原因,说是与c语言的历史原因有关,暂不明确,全当记住就好了,容后有时间再作深究
        
        如此,数组的赋值,就只能是内存拷贝,或者单个数组元素赋值了
初始化:对数组整体赋值,只能作一次,即初始化。如同name[10]={0}这种用法

结构体的用法:
例如:
struct{
    int a;
    int b;
    char c;
}sTest;

struct sTest sss={0};

作为右值:允许;结构体名表示结构体变量本身,即结构体的内存空间指带。但作为右值,赋给左值时,是一种浅拷贝【关于浅拷贝与深拷贝,容后下一篇再作说明】,即成员变量值拷贝。例如,左值成员指针变量,指向右值成员指针变量所指向的地址,而不是重新分配内存空间
作为左值:允许;结构体名表示结构体变量本身,即结构体的内存空间指带。
初始化:对结构体整体赋值,只能作一次,即初始化。如同struct sTest sss={0};但右值如果是结构体变量,则是赋值,而不是初始化,是可以多次进行的。

转载于:https://www.cnblogs.com/tedani/p/10018054.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值