关于数组、结构体的拷贝:待添加

数组有如下用法:
例如: 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};但右值如果是结构体变量,则是赋值,而不是初始化,是可以多次进行的。

猜你喜欢

转载自www.cnblogs.com/tedani/p/10018054.html
今日推荐