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