C程序设计----结构体
来源:互联网 发布:安卓打开java闪退 编辑:程序博客网 时间:2024/05/17 10:29
一、与结构体相关的优先级
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]; //假设n=NKEYSstruct 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 可以返回正确的对象长度。
0 0
- C程序设计----结构体
- C语言及程序设计进阶例程-11 体验结构体
- C程序设计笔记9-10章 结构体/IO
- C程序设计选择结构的嵌套
- c语言学习----选择结构程序设计
- 学习C语言选择结构程序设计
- C语言程序设计---4:选择结构程序设计
- C语言程序设计---5:循环结构程序设计
- 【学习C++】学习C++ -> 选择结构程序设计
- C语言--选择结构的程序设计
- 《C语言及程序设计初步》-07分支结构程序设计体验
- C零散_摘自C程序设计_结构体中.和->区别
- 结构体程序设计(一)
- 结构体程序设计(二)
- 程序设计与C语言学习笔记_第八章结构体、公用体、枚举
- C02-程序设计基础提高班(C++)第8周上机任务-结构体
- 【程序设计】C与C++中空结构体与空类的大小
- 程序设计C 实验六 结构体 题目四 偷菜时间表(0069)
- 理解Python中的with…as…语法
- 并发与竞态
- 循环-02. 计算圆周率(15)
- 0009.Scala内部类
- 【ssh】Ibatis代码自动生成工具(项目)——Abator安装与应用实例(图解)
- C程序设计----结构体
- 比较两个路径下DLL版本并出力CSV
- 快速选择
- 让编译器去计算数组元素个数
- 已成功与服务器建立连接,但是在登录前发生错误
- Ubuntu 14.04中修复默认启用HDMI后没有声音的问题
- UI中的控件简介
- java基础之数据类型的转换
- 判断二叉树是不是平衡二叉树