lumped 集成总结 mandating托管 consecutively连续地 contiguous临近的 mnemonic记忆力的 mimics 酷似 魔方 bind捆绑 synonym同义词 syntactically依照语法 consistent一致 rudimentary退化的 初步的  indices index的复数 interchange 互相转换 mnemonic记忆的

abbreviation 省略 略号 cryptic神秘的 有隐含意义的 lexicographically字典顺序 premium优质的 保险 首要? criteria标准准则

1 符号& 只能用于变量和数组

2指针指向特定类型的对象 (void可以指向任何对象 但是不能被引用)

*ip = *ip + 10;  *和&优先级比算数运算符高 等于*ip增加 10

y = *ip+1; *ip 加上1 给y

*ip +=1;  等于++*ip; 等价于 (*ip)++;  为什么要加括号呢 因为*和++ 等一元运算符是右往左计算的

3设 int *pa; pa = a[0];(或者写成pa = a;) 数组名代表数组第一个元素的地址

指针是一个变量 pa如果是一个指针 pa=a pa++ 合法的 反之 数组名不是一个变量 a = pa 及 a++不合法 在传递给实参的时候 实际上传递的是一个地址

如strlen(“hello, world”); strlen(array); strlen(ptr);

如果确定元素存在 那么a[-1] a[-2]也是合法的 代表0之前两个数字  当然 过界的引用是非法的

(多一句 数组是从0开始的 你定义一个 int a[10] 实际上是a[0]~a[9])

4 指针初始化的时候可以初始化赋值一个地址或者0 其中0 不是任何有效数据的地址  可以作为返回值来使用. 指针和整数不能相互转换,0是一个例外

5

5任何指针和0及同一数组的指针比较有意义 不同数组之间指针比较是未定义的

6int 可能容不下一个字符组的大小 而 stddef.h中的ptrdiff_t可以包含两个指针之间的差值 在标准库下可以用size_t(sizeof返回的无符号类型)

7同类型的的指针才能有效运算 两个同数组的指针只能相减  指针可以加或者减去一个整数 其他都是非法的  什么指针相加 相乘 相除 移位 遮盖 或者强制转换float double 都不行 (void *的指针可以)

8 char amessage[ ]="now is the time";  // amessage是一个数组 正好能包括字符加一个\0

char *pmessage="now is the time"; //pmessage是一个指针

9while((*s++=*t++)!= '\0');  先引用值给s 然后再自增s和t    *p++;//这里*和++为同一优先级,P先和++结合;右移P++是先使用P的值,后P的值+1  

是否为\0也是多余的     while(*s++=*t++) ;

  10 *--p; 先减p再引用

*p++ =val; 将val压进栈 val = *--p;将top压出栈

11断电了..... char类型也能存放一些较小的非负整型数字

12逻辑表达式的值为0和1 数组按行存储

13二维数组是一个特殊的一维数组 可以看成有两个元素 每个元素是一个数组的数组  另外二维数组初始化可以用这样的形式 a[2][3]={{1,2,3},{4,5,6}}; 这种方式的好处是比较直观

14二维数组在传递给实参的时候 可以省略行向量 因为是传递一个指针指向一个一维数组 一维数组每个元素即是一个数组  如 f(int a[],[3])或者 f(int (*a)[3])  这代表一个指针指向一个有三个整数的数组

15 []的优先级高于 * 所以要加括号 去了括号 int *a[3]; 是一个3个指向int的指针

16字符串数组 如 char * name[]={“1234”,“dfsdfsd”,“fgdfgd”}; 其中 name[0] name[1]] name[2] 分别代表指向1234 dfsdfsd fgdfgd的指针。

17二维数组 可以用列数乘以所在行数+列数进行计算

18 int a[10][20];和int *b[10];的区别在于 b数组每个指针可以元素不同 如20个 10个  如 char *name[]={"illegal month,"Jan","Feb","Mar"};

19命令行参数 第一个为argc为参数计数  二为参数向量是一个指向一个字符串的指针 由于 argv[0]是程序名 所以argc最小为1 1代表后面没参数 如图下  argc=3  argv[argc-1]为最后一个字符串 argv[argc]规定为0(null 指针)

printf((argc>1)? "%s" : "%s", *++argv);

20 (*++argv)[0]] 代表字符串的第一个字母 *++argv[0]代表对argv[0]进行自增

21调用函数指针的时候可以这样

void qsort(void *linptr[],int left,int right,int (*comp)(void *, void *)); //原型  *comp如果不加括号的话 意思就是返回一个指向int的指针了

调用时候 qsort((void**) lineptr,0,nlines-1,int (*)(void*,void*))(numeric?numucmp:strcmp));   //其中 numucmp和strcmp是函数的地址 不需要加& 就像数组前一样 不用加

在函数内部使用的时候要加* 如 *comp(v[i],v[left])  comp是一个指向一个有两个参数并返回int的函数  如果不加括号的话 意思就是返回一个指向int的指针了

22 任何指针可以转换为 void *类型 并在转回来的时候不会丢失信息(通常) 但是编译器可能会报错

23关于DCL 把c转成一个语言描述 如

dcl : optional  *'s direct-dcl

direct-dcl name

      (dcl)

      direct-dcl()

      direct-dcl[optional size]

如(*pfa[])()

pfa是一个name 也是一个d-dcl(我缩写下) pfa[]也是d-dcl ;*pfa[]则是一个dcl  (*pfa[])又是一个d-dcl  (*pfa[])()也是一个d-dcl

先丢这

the c programing language 学习过程5的更多相关文章

  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 学习过程6

    payroll工资名单 hierarchy分层层次 vexing 使人烦恼的 alignment结盟 semantics 语义 aethetic审美 parameterize 参数化 1结构标记 成员 ...

  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. python_如何为创建大量实例节省内存?

    案例: 某网络游戏中,定义了玩家类Player(id, name, status,....),每有一个在线玩家,在服务器程序内有一个Player的实例,当在线人数很多时,将产生大量实例(百万级别) 需 ...

  2. Linux或Window是修改snmp的默认端口

    SNMP默认端口通讯使用 UDP 161,在安装一些监控软件的过程中,常常提示端口被占用等情况,下面说一下如何修改系统的默认SNMP端口 windows修改snmp端口 1 打开services文件 ...

  3. asp.net web api 向客户端返回错误信息

    1使用Http状态码 ASP.NET Web Api框架提供了Http状态码的值,如下图所示. 虽然有这些预定义的状态码,但在实际项目中使用自定状态码结合预定义状态码更有优势. 通过在适当的位置抛出异 ...

  4. selenium-java web自动化测试工具

    本篇文章由来,这两天整理了下自己经常使用而且很熟练的项目,今天突然想起漏了一个,补上了,但想到还没对应的博客,那就写一个简单的 我经常使用且相对熟练的部分技术如下(不知道算不算各位大神眼中的辣鸡): ...

  5. 各模拟器adb连接端口

    如果执行自动化测试,在没有真机的情况下,我们唯一的选择便是模拟器.目前市面上有很多模拟器,他们使用adb连接时都会有不同的默认接口,当adb无法自动连接模拟器时,手动使用ip+端口连接是很好的选择.下 ...

  6. 12、SEO工程师指南 - 软件项目角色指南系列文章

    第11章       SEO工程师   SEO工程师是一个比较新兴的职位,在实际的项目管理过程中,SEO工程师的地位相对靠后,只有在项目试运行以及运营期间才能体现出SEO工程师的作用.在项目完成之后, ...

  7. 为Ghost博客扩展代码高亮、数学公式、页面统计、评论

    前几天捣鼓了一下博客首页,接下来再丰富一下博客页面的功能与内容.由于我所使用的Ghost博客专注于轻量简洁,因此标题中提到的功能在Ghost中默认均不支持.下面将逐个介绍一下如何为Ghost扩展这些功 ...

  8. [Miller-Rabin & Pollard-rho]【学习笔记】

    Miller-Rabin & Pollard-rho 很久之前就学过了...今天重学一遍 利用费马小定理,但不能判断伪素数的情况 基于a的伪素数n: \(a^{n-1} \equiv 1 \p ...

  9. ctags的使用

    1. 生成tags文件 为当前目录下的所有C程序文件生成对应的tags文件: $ ctags *.c        为同一个目录下的所有文件建立tags如下 $ ctags –R (较常用) 这个命令 ...

  10. ThinkPHP删除栏目(多)

    前段时间发表了一个删除栏目的随笔,当时实现的功能是删除一条信息,这次来实现一下批量删除栏目. 我们需要达到的是这样一个效果: 选中批量删除按钮后可以选中所有该页面的栏目,这个是前端页面的实现,在这里就 ...