struct stat st 和 struct stat *st 两种定义方式区别
2012-04-11 21:34
183 查看
【就事论事的解释】
struct stat *st;
是定义了一个stat结构体的指针,
这句话的重点在于是“指针”,其本质上,(在32位的体系结构中)也就是一个32位的数而已。
对于名称和实体来说:
名称:
一个名字叫做st指针
实体:
内存里面,也只有一个32位的空间,来存放这个指针。
struct stat st;
定义饿了一个stat类型的结构体,名字叫做st。
这里的重点是“结构体”,其根据结构体具体定义的不同,占用不同的物理空间大小。
这里的名称和实体:
名称,是一个叫做st的结构体。
实体:
就是一个结构体,结构体有多大,st就占用了多大的物理空间。
也就是说,比如你的结构体很复杂,比如所有成员空间加起来,有80字节,那么,这个st实际就占用了80个字节的大小。
【为何容易犯错】
意思解释完了,说一下为何会犯这样的错误,
我们是定义了这个:
struct stat *st;
但是,实际只是定义所需要的结构体的指针,而不是实际结构体本身。
举个例子,结构体好比是一个房间。
不同类型的房间大小不同,占用的物理空间也不一样。
结构体的指针,好比一个房间的一把钥匙。
不论其所相关的房间的大小,钥匙,始终只占钥匙这么大一点的空间(默认,可以理解为4个字节,32位)。
我们之所以犯这样的错,归根结底,都是太“贪”了,以后弄了个指针(钥匙),系统就会自动给你分配好了,
指针所指向的东西(别人就会给你个房子。。。)。
【引申】
以后不论你在别处再看见类似的指针,
不管这把钥匙可以开的是,一个小房间,还是一栋别墅,还是一个汽车,还是一个玩具车,
它都只是一把钥匙而已,只是这么大而已。物理上分配的空间也都是32位而已。
记住,如果你没有得到其他的房子或汽车,而只是弄了把钥匙。除非你买了房子(自己申请一个结构体),否则,没人会白白送你房
子的(系统不会理会你这个指针指向哪里,更不会自己另外给你分配一个结构体)。
如果还没完全理解,那么教个最简单的方法,只要记住这个就好了:
钥匙 = 3
4000
2位 = 4字节
这样,你就不会搞混淆了。
【后记】
如果都只是弄把钥匙,就都有了房子车子,那么现在就不会有这么多为买房买车而郁闷的了,
直接去几元钱复制一把就好了。。。
struct stat *st;
是定义了一个stat结构体的指针,
这句话的重点在于是“指针”,其本质上,(在32位的体系结构中)也就是一个32位的数而已。
对于名称和实体来说:
名称:
一个名字叫做st指针
实体:
内存里面,也只有一个32位的空间,来存放这个指针。
struct stat st;
定义饿了一个stat类型的结构体,名字叫做st。
这里的重点是“结构体”,其根据结构体具体定义的不同,占用不同的物理空间大小。
这里的名称和实体:
名称,是一个叫做st的结构体。
实体:
就是一个结构体,结构体有多大,st就占用了多大的物理空间。
也就是说,比如你的结构体很复杂,比如所有成员空间加起来,有80字节,那么,这个st实际就占用了80个字节的大小。
【为何容易犯错】
意思解释完了,说一下为何会犯这样的错误,
我们是定义了这个:
struct stat *st;
但是,实际只是定义所需要的结构体的指针,而不是实际结构体本身。
举个例子,结构体好比是一个房间。
不同类型的房间大小不同,占用的物理空间也不一样。
结构体的指针,好比一个房间的一把钥匙。
不论其所相关的房间的大小,钥匙,始终只占钥匙这么大一点的空间(默认,可以理解为4个字节,32位)。
我们之所以犯这样的错,归根结底,都是太“贪”了,以后弄了个指针(钥匙),系统就会自动给你分配好了,
指针所指向的东西(别人就会给你个房子。。。)。
【引申】
以后不论你在别处再看见类似的指针,
不管这把钥匙可以开的是,一个小房间,还是一栋别墅,还是一个汽车,还是一个玩具车,
它都只是一把钥匙而已,只是这么大而已。物理上分配的空间也都是32位而已。
记住,如果你没有得到其他的房子或汽车,而只是弄了把钥匙。除非你买了房子(自己申请一个结构体),否则,没人会白白送你房
子的(系统不会理会你这个指针指向哪里,更不会自己另外给你分配一个结构体)。
如果还没完全理解,那么教个最简单的方法,只要记住这个就好了:
钥匙 = 3
4000
2位 = 4字节
这样,你就不会搞混淆了。
【后记】
如果都只是弄把钥匙,就都有了房子车子,那么现在就不会有这么多为买房买车而郁闷的了,
直接去几元钱复制一把就好了。。。
相关文章推荐
- js两种定义函数、继承方式及区别
- c++ 定义常量的两种方式 和 区别
- JS两种定义方式的区别、内部原理
- Javascript中两种方式定义函数的区别
- Map与HashMap两种定义方式的区别
- JS两种定义方式的区别
- js两种定义函数方式及区别
- 【Struct(结构体)杂谈之二】名不正则言不顺,Struct(结构体)在C和C++中定义方式的区别
- JS两种定义方式的区别、内部原理
- 字符数组两种定义方式的区别
- js两种定义函数、继承方式及区别
- C++中可以用struct和class来定义类型,这两种类型有什么区别
- 谈谈两种引用方式#import和@class使用区别
- Java中有两种实现多线程的方式以及两种方式之间的区别
- Android 注册广播的两种方式区别
- java中实现同步的两种方式:syschronized和lock的区别和联系
- 多线程两种实现方式的区别
- javascript函数的三种定义方式及区别
- java中实现同步的两种方式:syschronized和lock的区别和联系
- javascript两种function的定义介绍及区别说明