当声明一个
int main(){
struct fish myFish={"tom","shark",50,10};
......
}
思考:
1.struct fish myFish; 定义后,这个myFish就是结构体变量的名称。
2.注意字段: myFish.name 对于字段的访问。
3.字段与字段之间在内存中是紧密排列的吗?很紧凑吗?
不是。有时内存在字段之间会存在一些间隔。
看结果:
24
0x7fff5fbff8a8
0x7fff5fbff8b0
0x7fff5fbff8b8
0x7fff5fbff8bc
32
0x7fff5fbff888
0x7fff5fbff890
0x7fff5fbff898
0x7fff5fbff8a0
如下分析:
4.每个字段都会占一个字长吗?
不对。如上所示 struct fish里面。
teeth 与 age,共用一个字长。因为并没有越过字的边界。
但是如果下面的struct pig; 将species紧跟在teeth后面的话,就会越过字的边界,为避免这种情况,让teeth后面间隔出4个字节。
5.为什么计算机这么介意越界呢?
因为计算机要从内存的一个字中读取完整的信息。
6.在java中,如果赋一个值,那么直接是引用的拷贝。
在C语言中,所有的赋值都是值的拷贝。
正如上面的struct fish myFish;
struct fish hisFish=myFish;
可没有那么听话,因为此时只是将值拷贝了一份出来,传给了fish;