《C和指针》学习笔记(二)第七~第十章

1、机器无法判断值的数据类型,编译器根据值的声明类型创建适当的指令,机器只是盲目地执行这些指令而已
2、char * strpbrk(const char * cs,const char * ct)
    在源字符串(s1)中找出最先含有搜索字符串(s2)中任一字符的位置并返回,若找不到则返回空指针。
3、函数声明向编译器提供函数的相关信息
4、存根(stub)为尚未编写的程序站好位置
5、无返回值的函数被称为过程(procedure)
6、函数的缺省认定,对于无法见到原型的函数,编译器认定该函数返回一个整型值
7、一般为传值调用,若参数为数组名,使用下标则为传址调用,实际上也是传值只不过是地址的拷贝,可以间接修改数组的内容
8、声明数组参数时不指定长度合法的原因:函数不为数组分配内存,间接访问将调用数组元素
9、抽象数据类型(ADT)黑盒设计:模块具有功能说明和接口说明,模块用户不知道实现细节不能以任何方式访问模块
10、尾部递归要转换成一个简单的循环
11、许多问题以递归的方式描述只是因为这样更加清晰,但是这些问题的迭代实现往往比递归实现效率更高
12、可变参数列表(stdarg宏)使用方法:先定义一个va_list类型的变量,va_start(va_list类型的变量,数量)开始访问可变参数,va_arg(va_list类型的变量,类型名)可以依次读取变量,va_end(var_arg)结束访问
13、以上这些宏无法判断实际存在的参数类型,这些宏无法判断每个参数的类型,可变参数只能从第一个到最后一个依次进行访问
14、数组名(首地址)是一个常量值,是不能被修改的
15、2[array]与array[2]的作用相同
16、当根据某个固定数目的增量在一个数组中移动时,使用指针变量将比使用下标产生效率更高的代码,当增量是1时,表现的更加突出
17、每次函数调用数组时都会再一次初始化,所以说如果数组很大,定义成static只初始化,带来的效率提升是很可观的
18、分辨初始化列表和字符串常量:当用于初始化一个字符数组时,它就是一个初始化列表,在其他任何地方,他都表示一个字符串常量
19、int a[3][10]      a的类型:指向包含10个整型元素的数组的指针
20、多维数组作为参数void func(int (*mat)[10]);  或者  void func(int mat[][10]);
21、不能是void func(int **mat);    这里把mat声明为指向整形指针的指针,与指向包含10个整型元素的数组的指针不是一回事
22、sizeof数组名返回整个数组所占的字节数
23、strlen返回一个size_t类型的值,是一个无符号整型
24、memmove使用时有一个中间暂存区,所以说如果源和目标参数真的可能存在重叠,就应该使用memmove而不是memcpy
25、strspn函数计算一个字符串的起始部分匹配一个指定字符集中任意字符的字符数,strcspn不匹配的字符数
26、strtok函数把一个指定字符串分割成几个标记,注意将会修改它所处理的字符串
27、strerror把一个错误代码作为参数,返回一个指针,指向一个描述错误的字符串
28、如果想在多个源文件中使用同一种类型的结构,应把结构体的初始化放在一个头文件中
29、结构体的自引用,不能引用结构可以引用结构体指针,且引用时结构类型名已经被定义
30、不完整声明,用于相互依赖结构,例:struct b;   然后结构b的指针已经可以被引用了
31、在定义结构体时把较大的元素放在靠前的位置,这样可以节约存储空间。
32、offsetof() stddef.h  结构为size_t类型的变量,表示这个指定成员开始存储位置距离开始存储位置偏移几个字节
33、用结构体作为函数参数时应该传递结构体的指针而不是结构体本身
34、联合变量可以被初始化,但是初始值必须是联合第一个成员的类型,且位于一对花括号中
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值