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的更多相关文章

  1. the c programing language 学习过程8

    glean 捡拾落穗; glean insight 深入了解 modeled模型化 peripheral外围的 himogeneous匀称的 intents 意图  excerpt摘录 intende ...

  2. the c programing language 学习过程7

    interact 互动 carriage运费运输 linefeed 换行 redirection改方向 interleaved交叉存取 adequate足够的 untouched原样的  specif ...

  3. the c programing language 学习过程5

    lumped 集成总结 mandating托管 consecutively连续地 contiguous临近的 mnemonic记忆力的 mimics 酷似 魔方 bind捆绑 synonym同义词 s ...

  4. the c programing language 学习过程4

    4Functions and Program Structure scratch 刮擦 starting over from scratch从头开始 reside驻留 separately 分别的 f ...

  5. the c programing language 学习过程3

    ControlFlow  控制流 specify 指定 compound statement 复合语句 cryptic有隐含意义的 ambiguity歧义 robust稳健 disintegratio ...

  6. the c programing language 学习过程2

    manipulated 操纵  notations符号 hexadecimal十六进制 precision精度 be concatenated at 把····联系起来 enumerations枚举  ...

  7. 使用一个数组存储一个英文句子"java is an object oriented programing language"

    class fun { public static void main(String[] args) { String str="java is an object oriented pro ...

  8. The python programing language

    Python is an example of high-level language. As you might infer from the name “high-level language”, ...

  9. Linux下C高手成长过程

    建议学习路径:  首先先学学编辑器,vim, emacs什么的都行. 然后学make file文件,只要知道一点就行,这样就可以准备编程序了.  然后看看<C程序设计语言>K&R, ...

随机推荐

  1. 智能机器人chatbot论文集合

    机器不学习 jqbxx.com-专注机器学习,深度学习,自然语言处理,大数据,个性化推荐,搜索算法,知识图谱 今年开始接触chatbot,跟着各种专栏学习了一段时间,也读了一些论文,在这里汇总一下.感 ...

  2. Git知识总览(四) git分支管理之rebase 以及 cherry-pick相关操作

    上篇博客聊了<Git知识总览(三) 分支的创建.删除.切换.合并以及冲突解决>,本篇博客我们主要来看一下 rebase 变基相关的操作.rebase 操作和 merge 操作最终都可以达到 ...

  3. linux下^M问题

    ^M的原因 Dos.Windows 格式的文件,用 0D 0A (CR+LF)作为换行符 而Unix 的则是以0A(LF) 作为换行符 所以dos 底下的文本文件到了unix的话,换行符就会多出来一个 ...

  4. Regular Expression Syntax

    python的正则表达式 正则表达式的概念 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个"规则字符串",这个"规 ...

  5. SQL查询系列1---

    1.查询关系为夫妻,年龄相加大于60的信息 表1 信息表 info id 编号   sex 性别 0-女,1-男 age 年龄   表2 关系表 rel id1 编号1 外键 id2 编号2 外键 r ...

  6. [PHP]PDO占位符预处理在 IN 和 LIKE 中用法

    两点注意项: 1. 占位符 (?) 必须被用在整个值的位置,不需要引号等其它字符. 2. 参数按数组元素顺序依次传递给占位符. <?php /** * PDO基于占位符的查询预处理 * * @l ...

  7. MySql-5.7.17-20解压缩版安装配置

    MySql-5.7.XXX解压缩版安装配置   1.mysql-5.7.20是解压版免安装的,版本下载地址:http://dev.mysql.com/downloads/mysql/ 如下图 2.解压 ...

  8. form表单中get和post两种提交方式的区别

    一.form表单中get和post两种提交方式的区别? 1.get提交表单中的内容在链接处是可见的.post不可见 2.post相比于get是安全的 3.post不收限制大小,get有限制大小(黑马视 ...

  9. mysql插入数据时检查是否某字段已存在

    SELECT\n" + " '',\n" + " '{0}',\n" + " '{1}',\n" + " '{2}'\n ...

  10. HDU 4315 Climbing the Hill [阶梯Nim]

    传送门 题意: 和上题基本一样:山顶可以有多人,谁先把king放到山顶谁就胜 并不太明白 #include <iostream> #include <cstdio> #incl ...