the c programing language 学习过程6
payroll工资名单 hierarchy分层层次 vexing 使人烦恼的 alignment结盟 semantics 语义 aethetic审美 parameterize 参数化
1结构标记 成员 和普通变量(非成员) 可以用相同的名字 不同结构里的成员也可以用相同名字 但是最好别这么搞
2结构成员可以用.链接 如 pt.x maxpt.y 在嵌套的情况下 如 struct rect { struct point pt1;}; struct rect screen; screen.pt1.x; 也可以这么调用
3如果结构很大 可以用指针数组 struct point *pp; (*pp).x是一个成员.优先级比*高 或者 pp->x
4struct { int lenp;} *p; ++p->len;加的是len 因为所有运算符里 . -> () []运算优先级最高 你可以用 (++p)->len; (p++)->len则不用加括号
5结构数组
struct key {
char *word;
int count;
};
struct key keytab[NEYS];
struct key {
char *word;
int count;
} keytab[]={
"auto",0,
"break",0,
.......
"while",0};
更好的方法是{"auto“,0},{“break”,0},......,{“while”,0}; 但是如果只是简单变量或者字符串 而且任何变量都不空 可以用前者表示
6结构里面的项数不用数可以 #define NKEYS (sizeof keytab/sizeof keytab[0]]
7对于三个指针来说 mid low high mid = (low+high)/2 是错误的 mid = low+(high-low)/2; &tab[-1]和&tab[n]都是非法的 (n项数组) 但是&tab[n]是可以执行的
8
struct key {
char word;
int count;
} 因为不同对象可能有对齐要求 char 是一个字符 int 是4个字符 但是这个结构没准就是8个字符而不是五个 这叫做空穴 holes 这种情况用sizeof就比较好了
9 struct key * binsearch(char * word, struct key * tab,int n) 函数名可能找不到 而下面这样写就比较清晰 当然这个无伤大雅
struct key *
binsearch(char * word, struct key * tab,int n)
10二叉树挺重要的 多看看 我这块挺清楚的 就不絮叨了
结构内有包含自身结构的成员是非法的 但是指针可以
11 typedef char * String; 让string变成了一个 char* 可以 String p; String lineptr[MAXLINES] 一般首字母大写以示区别
12typedefy是编译器处理的 他的文本替换功能要超过预处理器(#define的情况)
如 typedef int (*PFI)(char *,char *) PFI是一个有两个char *参数 返回int的函数
typedef在移植的时候很方便 只要修改定义的变量就行 同样 定义一个容易懂的名字也增加了可读性
13任何联合内类型的变量都可以赋值给联合 但是之后使用读取时要保持一致 否则结果将取决于具体实现 联合存储空间为成员最“宽“类型的大小
struct{
char *name;
union{
int ival;
float fval;
char *sval;}u;}symtab[NSYM];
symtab[i].u.sval[0]
14位字段
方式1 可以用#define KEYWORD 01
#define EXTRENAL 02
#define STATIC 04
俗称屏蔽码来打开关闭某一个位
flags |= EXTERNAL | STATIC; (|是按位或) 就是打开EXTERNAL 和STATIC位
flags &= ~(EXTERNAL | STATIC); 则是关闭这两个位置的
当然还有一种更直接的方式
如
struct{
unsigned int is _keyword:1;
unsigned int is _extern:1;
unsigned int is _static:1;
}flags; 这里定义了一个flags变量 包含三个1位的字段 (冒号之后作为宽度)
可以设置 flags.is_extern = flags.is_static =1 就把这两位打开了
宽度0可以用来在强制在下一个字边界对齐? 一个冒号加上宽度 但是没名字可以起到填充作用
有些机器是字段分配是从左到右 有些则相反 所以维护内部数据很有用 对于外部数据要搞清楚哪端优先 所以程序可能没办法移植
字段只能声明为int 为了方便移植 最好声明为 unsigned int 字段也不是数组 没有地址
the c programing language 学习过程6的更多相关文章
- the c programing language 学习过程8
glean 捡拾落穗; glean insight 深入了解 modeled模型化 peripheral外围的 himogeneous匀称的 intents 意图 excerpt摘录 intende ...
- the c programing language 学习过程7
interact 互动 carriage运费运输 linefeed 换行 redirection改方向 interleaved交叉存取 adequate足够的 untouched原样的 specif ...
- the c programing language 学习过程5
lumped 集成总结 mandating托管 consecutively连续地 contiguous临近的 mnemonic记忆力的 mimics 酷似 魔方 bind捆绑 synonym同义词 s ...
- the c programing language 学习过程4
4Functions and Program Structure scratch 刮擦 starting over from scratch从头开始 reside驻留 separately 分别的 f ...
- the c programing language 学习过程3
ControlFlow 控制流 specify 指定 compound statement 复合语句 cryptic有隐含意义的 ambiguity歧义 robust稳健 disintegratio ...
- the c programing language 学习过程2
manipulated 操纵 notations符号 hexadecimal十六进制 precision精度 be concatenated at 把····联系起来 enumerations枚举 ...
- 使用一个数组存储一个英文句子"java is an object oriented programing language"
class fun { public static void main(String[] args) { String str="java is an object oriented pro ...
- The python programing language
Python is an example of high-level language. As you might infer from the name “high-level language”, ...
- Linux下C高手成长过程
建议学习路径: 首先先学学编辑器,vim, emacs什么的都行. 然后学make file文件,只要知道一点就行,这样就可以准备编程序了. 然后看看<C程序设计语言>K&R, ...
随机推荐
- sqlserver存储过程及mybatis调用——待续
创建带输入参数存储过程 use yanantestgoif exists (select * from sys.objects where name='yanan')drop procedure ya ...
- lambda高级进阶--延迟执行
前面的整理我们也已经说到了,使用lambda表达式的主要原因是,将代码的执行延迟到一个合适的时间点.在使用lambda表达式的时候务必记住一点就是说lambda表达式都是延迟执行的. 延迟执行代码的原 ...
- win10预览版无开始菜单解决方案
1.按下Win+R键打开“运行”程序,键入gpedit.msc 回车以打开本地组策略编辑器 2.调到图示位置将windows设置->安全设置->本地策略->安全选项->“用户账 ...
- python --- 基础多线程编程
在python中进行多线程编程之前必须了解的问题: 1. 什么是线程? 答:线程是程序中一个单一的顺序控制流程.进程内一个相对独立的.可调度的执行单元,是系统独立调度和分派CPU的基本单位指运行中的程 ...
- JavaSE基础篇—流程控制语句—方法的定义 调用和重载
1.定义方法 是封装在一起来执行操作语句的集合,用来完成某个功能操作,简单的说就是提取出来的有特定功能的代码(程序).在某些语言中被称为函数或者过程,比较特殊的方法是main方法(主方法),main方 ...
- 刚买个炼狱蝰蛇1800dpi的下完驱动提示没有发现鼠标
2017-02-19补充:可以下载下面的程序 ,也可以访问 http://cn.razerzone.com/synapse/ 下载雷云 也可解决问题 ------------------------ ...
- cat写入数据
1.cat可以利用两个>>把内容追加到文件中 cat >>oldboy.txt<<EOF >1 >2 >EOF 会在文件中加入EOF中间的数据.E ...
- Core Animation 文档翻译 (第六篇)
高级动画技巧 配置属性动画或者关键帧动画的方式是多种多样的.需要同时执行多个动画或者顺序执行多个动画的APP,可以通过高级的方式同步这些动画的timing或者将这些动画绑定在一起.我们也可以使用其 ...
- PyCharm运行Nosetests并导出测试报告
1. Pycharm运行Nosetests PyCharm可以使用两种方法,运行Nosetests测试文件: 1) 图形用户界面GUI a) 在PyCharm中,选中测试文件,如Tests/test_ ...
- Core Animation 文档翻译 (第八篇)—提高动画的性能
前言 核心动画是提高基于APP动画帧率的好方式,但是核心动画的使用不代表性能的提升的保证.尤其在OSX,当使用核心动画时,我们仍需选择最有效的方式.和所有的性能相关的问题一样,我们应该使用工具时时的评 ...