C程序设计----结构体
2015-08-29 17:31
295 查看
一、与结构体相关的优先级
struct { int len; char *str; }*p;首先要知道,在所有的运算符中,结构运算符 "."和 "->"、用于函数调用的 "()"、用于下标的 [
] 的优先级最高。
++p->len; /* 等同于++(p->len),增加len的值,而不增加p的值 */ (p++)->len; /* 先对len进行操作,然后对p进行加1 */ *p->str; /* 读取的是str所指向的对象的值 */ *p->str++; /* 先读取str指向的对象的值,再对str加1 */ (*p->str)++; /* 将指针str指向的对象的值加1 */ *p++->str; /* 先读取str指向对象的值,然后再将p加1 */
二、指向结构的指针
struct key{ char *word; int count; }; struct key keytab[NKEYS];
1.条件编译语句 #if 中不能使用 sizeof ,因为预处理器不对类型名进行解析;
但预处理器并不计算 #define 语句中的表达式,因此在 #define 中使用 sizeof 是合法的。
例如:
#define NKEYS (sizeof keytab / sizeof(struct key)) //或者 #define NKEYS (sizeof keytab / sizeof(keytab[0]))
2.指向同一个结构体的两个指针的中间值的计算问题:
struct key *low = &keytab[0]; struct key *low = &keytab ; //假设n=NKEYS struct key *mid;首先说明,C语言的定义保证数组末尾之后的第一个元素的指针算数运算是可以正确执行的,但对该指针的间接引用是非法的。
正确:mid = low + (high-low) / 2; 因为两个指针之间的加法是非法的。
错误:mid = (low + high) / 2; 两个指针之间的减法是合法的。
3.结构的长度不等于各个成员长度的和,因为不同的对象有不同的对齐要求,所以结构体中可能出现“空穴”(hole)。
例如:
struct { char c; int i; };假设 char 类型占一个字节,int 类型占4个字节,则结构可能需要8个字节的存储空间,而不是 5 个字节。用 sizeof 可以返回正确的对象长度。
相关文章推荐
- cascade.xml参数解析
- 【ssh】Ibatis代码自动生成工具(项目)——Abator安装与应用实例(图解)
- MFC Radio Button 使用 分组 RadioButton 用法
- Hession
- 0009.Scala内部类
- Android屏幕适配全攻略(最权威的官方适配指导)
- 1236:排名
- PHP定时执行任务/Cron Job
- 循环-02. 计算圆周率(15)
- 红色警戒2修改器原理百科(二)
- MYSQL字段
- ThinkPHP多个分页的实现
- [leetcode] 141.Linked List Cycle
- UI 19 数据库
- ICPC 7096 A Rational Sequence
- 记录一些PHP7RCC1编译问题
- 子元素使用float后使父元素有高度的方法
- 代码格式化工具 sourceInsight editplus ultraedit keil
- 44_02 nginx
- 求二叉树中两个节点的最低公共祖先