C语言中 不定义结构体变量求成员大小
所谓的求成员大小, 是求成员在该结构体中 用 sizeof(结构体名.结构体成员名) 求来的.
很多时候我们需要知道一个结构体成员中的某个成员的大小, 但是我们又不需要定义该结构体
类型的变量(定义的话会让人难以理解, 又没有实际的作用, 干嘛要定义?).
考虑可以用指针来反求, 比如有一个 POINT 类型的指针 pPoint, 那么:
sizeof(pPoint->x) 即为 x 成员的大小, 由于 sizeof 是在编译时刻求值, 且 sizeof 不
会对其表达式求值计算, 只判断类型(当然包含定义), 所以:此时的 pPoint 的值可以是任意的哦~~~
当然, 这个任意, 是为了突显出 pPoint == NULL (0) 的情况, 话都说明了 ~~~
不定义结构体求成员大小的方式:
sizeof( ( (结构体名*)0 )->成员名 )
女孩不哭 @ 2013-06-23 14:38:58 @ http://www.cnblogs.com/nbsofer
C语言中 不定义结构体变量求成员大小的更多相关文章
- C语言中 指针与结构体
就像数组一样,指向结构体的指针存储了结构体第一个元素的内存地址.与数组指针一样,结构体的指针必须声明和结构体类型保持一致,或者声明为void类型. 1 2 3 4 5 6 7 8 9 10 11 12 ...
- 【转】C语言中不同的结构体类型的指针间的强制转换详解
C语言中不同类型的结构体的指针间可以强制转换,很自由,也很危险.只要理解了其内部机制,你会发现C是非常灵活的. 一. 结构体声明如何内存的分布, 结构体指针声明结构体的首地址, 结构体成员声明该成员在 ...
- 如何系统学习C 语言(中)之 结构体篇
1,结构体 在前面我们知道变量和数组都可以用来存储数据,变量用来存储单个数据,数组可以用来存储一组同类型的数据,但你有没有发现--它们都只适合单一属性的数据.那现实生活中,很多对象都是具有多属性的.例 ...
- C语言 指向结构体变量的指针
一个指向变量的指针表示的是占内存中起始位置 一个指向结构体的变量的指针表示的是这个结构体变量占内存中的起始位置,同样它也可以指向结构体变量数组 定义结构体变量的指针: //假设已有一个结构体名为Stu ...
- C语言博客作业--结构体,文件
1.本章学习总结(2分) 1.1 学习内容总结 (1)结构体如何定义.成员如何赋值 结构体的一般形式为: struct 结构体名 { 数据类型 成员名1: 数据 ...
- 将c语言的结构体定义变成对应的golang语言的结构体定义,并将golang语言结构体变量的指针传递给c语言,cast C struct to Go struct
https://groups.google.com/forum/#!topic/golang-nuts/JkvR4dQy9t4 https://golang.org/misc/cgo/gmp/gmp. ...
- C语言中两个相同类型的结构体变量之间是可以相互直接赋值的
C语言中,在相同类型的变量间赋值时是直接内存复制的,即将他们的内存进行复制,而两个同类型的结构体变量属于同一种变量,所以赋值时是按照他们的内存分布来直接拷贝的.所以,在C语言中两个相同类型的结构体变量 ...
- C语言中结构体变量之间赋值
近期,我阅读了某新员工小刘写的C语言代码,发现其对结构体变量之间的赋值不是非常熟悉. 对于两个同样类型的结构体变量,他均採用的是逐个成员变量直接赋值的形式.例如以下的代码演示样例: 如上代码所看到的, ...
- C语言如何定义结构体
原文地址 1. struct与typedef struct区别 struct是结构体的关键字,用来声明结构体变量如 struct student { char num[10]; ch ...
随机推荐
- [Canvas]走近的女孩
动态效果请点此下载文件并使用Chrome或者FireFox浏览器观看. 图例: 代码: <!DOCTYPE html> <html lang="utf-8"> ...
- 【python】理想论坛爬虫1.08
#------------------------------------------------------------------------------------ # 理想论坛爬虫1.08, ...
- (C++)关于拷贝构造函数 Copy Constructor
题目: In which of the following scenarios is a Copy Constructor called or invoked? A. When no conve ...
- crm创建启用停用用户
public static readonly string entityName = "systemuser"; public Guid userId = Guid ...
- "___gxx_personality_v0", referenced from:
这是因为里面有用到C++ 的一些东西.所以会出现这个问题 两种解决办法. 第一种.TARGETS -> Build Phases -> Link Binary With Libraries ...
- LintCode: Binary Tree Postorder Traversal
C++,递归 /** * Definition of TreeNode: * class TreeNode { * public: * int val; * TreeNode *left, *righ ...
- hadoop三个配置文件的参数含义说明(转)
来自:http://blog.csdn.net/yangjl38/article/details/7583374 1 获取默认配置 配置hadoop,主要是配置core-site.xml, ...
- 【PMP】资源平衡与资源平滑
资源平衡:为了在资源需求与资源供给之间取得平衡,根据资源制约因素对开始日期和完成日期进行调整的一种技术 资源平滑:对进度模型中的活动进行调整,从而使项目资源需求不超过预定的资源限制的一种技术. 案例说 ...
- Kinect2.0骨骼跟踪与数据平滑
Kinect v1和Kinect v2传感器的配置比较: Kinect v1 Kinect v2 颜色(Color) 分辨率(Resolution) 640×480 1920× ...
- Oracle下载汇聚
官方下载oracl软件需要,注册oracle账户.方可下载.... Oracle11.2.0.4 Oracle11.2.0.4 for linux 1-7 http://pan.baidu.com/ ...