struct stat st 和 struct stat *st 两种定义方式区别

来源:互联网 发布:网络测速工具 编辑:程序博客网 时间:2024/06/05 08:38
【就事论事的解释】
struct   stat   *st;
是定义了一个stat结构体的指针,
这句话的重点在于是“指针”,其本质上,(在32位的体系结构中)也就是一个32位的数而已。
对于名称和实体来说:
名称:
一个名字叫做st指针
实体:
内存里面,也只有一个32位的空间,来存放这个指针。

struct   stat  st;
定义饿了一个stat类型的结构体,名字叫做st。
这里的重点是“结构体”,其根据结构体具体定义的不同,占用不同的物理空间大小。
这里的名称和实体:
名称,是一个叫做st的结构体。
实体:
就是一个结构体,结构体有多大,st就占用了多大的物理空间。
也就是说,比如你的结构体很复杂,比如所有成员空间加起来,有80字节,那么,这个st实际就占用了80个字节的大小。

【为何容易犯错】
意思解释完了,说一下为何会犯这样的错误,
我们是定义了这个:
struct   stat   *st;
但是,实际只是定义所需要的结构体的指针,而不是实际结构体本身。

举个例子,结构体好比是一个房间。
不同类型的房间大小不同,占用的物理空间也不一样。

结构体的指针,好比一个房间的一把钥匙。
不论其所相关的房间的大小,钥匙,始终只占钥匙这么大一点的空间(默认,可以理解为4个字节,32位)。

我们之所以犯这样的错,归根结底,都是太“贪”了,以后弄了个指针(钥匙),系统就会自动给你分配好了,
指针所指向的东西(别人就会给你个房子。。。)。

【引申】
以后不论你在别处再看见类似的指针,
不管这把钥匙可以开的是,一个小房间,还是一栋别墅,还是一个汽车,还是一个玩具车,
它都只是一把钥匙而已,只是这么大而已。物理上分配的空间也都是32位而已。

记住,如果你没有得到其他的房子或汽车,而只是弄了把钥匙。除非你买了房子(自己申请一个结构体),否则,没人会白白送你房

子的(系统不会理会你这个指针指向哪里,更不会自己另外给你分配一个结构体)。

如果还没完全理解,那么教个最简单的方法,只要记住这个就好了:
钥匙 = 32位 = 4字节

这样,你就不会搞混淆了。

【后记】
如果都只是弄把钥匙,就都有了房子车子,那么现在就不会有这么多为买房买车而郁闷的了,
直接去几元钱复制一把就好了。。。
原创粉丝点击