the c programing language 学习过程5
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的更多相关文章
- 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 学习过程6
payroll工资名单 hierarchy分层层次 vexing 使人烦恼的 alignment结盟 semantics 语义 aethetic审美 parameterize 参数化 1结构标记 成员 ...
- 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, ...
随机推荐
- Linux指令--cd,pwd
本文参照博客做了修改和总结,感谢作者的分享.http://www.cnblogs.com/peida/archive/2012/10/24/2736501.html cd 命令可以说是Linux中最基 ...
- 【转】Linux Oracle服务启动&停止脚本与开机自启动
在CentOS 6.3下安装完Oracle 10g R2,重开机之后,你会发现Oracle没有自行启动,这是正常的,因为在Linux下安装Oracle的确不会自行启动,必须要自行设置相关参数,首先先介 ...
- 【转】sed命令n,N,d,D,p,P,h,H,g,G,x解析
1. sed执行模板=sed '模式{命令1;命令2}' 即逐行读入模式空间,执行命令,最后输出打印出来 2. 为方便下面,先说下p和P,p打印当前模式空间内容,追加到默认输出之后,P打印当前模式空间 ...
- 开发JQuery插件(转)
教你开发jQuery插件(转) 阅读目录 基本方法 支持链式调用 让插件接收参数 面向对象的插件开发 关于命名空间 关于变量定义及命名 压缩的好处 工具 GitHub Service Hook 原 ...
- 开发快速定位需求(Coding之前的工作)
自我总结,求高人指点,欢迎拍砖! 目的:快速定位feature需求,避免浪费不必要的时间 需求目的:它要用来解决什么问题?(客户需求,bug fixed,学习新技术) 需求对象:它针对的对象是谁?(明 ...
- 从jvm源码看synchronzied
synchronized的使用 synchronized关键字是Java中解决并发问题的一种常用方法,也是最简单的一种方法,其作用有三个:(1)互斥性:确保线程互斥的访问同步代码(2)可见性:保证共享 ...
- hexo 博客支持PWA和压缩博文
目标网站 https://blog.rmiao.top/ PWA yarn add hexo-offline 然后在root config.yml里新增 # offline config passed ...
- iOS-NSPredicate正则验证【三种验证方法】
1.NSPredicate验证(谓词匹配) ///验证(string:验证的字符串) + (BOOL)stringValidate:(NSString *)string{ NSString *regu ...
- ASP.NET MVC 播放远程服务器上的MP3文件
问题: 做需求遇到需要播放远程服务器上的MP3音频,使用FTP去获取文件.但是一般都是在页面 <audio> 的src 中直接写文件地址来播放音频.实在不想做临时文件,折腾了半天终于可以通 ...
- SPOJ 7258 Lexicographical Substring Search [后缀自动机 DP]
题意:给一个长度不超过90000的串S,每次询问它的所有不同子串中,字典序第K小的,询问不超过500个. 第一道自己做的1A的SAM啦啦啦 很简单,建SAM后跑kth就行了 也需要按val基数排序倒着 ...