复盘
记录内容,回顾
经验
编程学习
1.学习方法
- 学习初期,用到啥学啥
- 学习20%的功能即可,不必去深究
- 啥火学啥
- 对于作品,是先完成再完美(编程也是一样的)
c语言
理论知识
- 指针指向数组
eg:
int a[10];
int *p;
p = a;//把数组的a的地址-->p - 数组元素表示方法(用数组,指针)
eg:
int *p=a;
第一位:
a[0]; *p; *(p+0); p[0]
第二位:
a[1]; *(p+1); p[1]
第一位地址:
&a[0]; a; a+0; p; (p+0)
第二位地址:
&a[1]; a+1; p+1 - []与*()的关系
[] <--> *()
eg:
a[0] <> *(a+0)
a[1] <> *(a+1)
*(p+0) <==> a[0] - 数组初始化时的大小
数组初始化时的大小可以不用给定,其余情况都要确定大小 - 求数组的长度
sizeof(a) / sizeof(int)
sizeof(a) / sizeof(a[0]) - continue的使用
跳出本轮循环(仅一次) - 多注意下循环后的递增变量
它要比退出时的条件多加一 - 宏定义(核心:替换)
优点:简洁明了,编译运算更快
宏定义的应用场景:与别人合作时,一些常用的变量可能会定义的有些冲突,因此定义一个变量,使用与全文,达到一改全改的效果
使用:
8.1定义一个变量
eg:#define PI 3.1415926
8.2定义标志符
eg:
define cheng //即用代替cheng(前面的被代替的,后面是用来代替)
c = a cheng b;
等同于:c = a * b;
8.3定义公式
eg:
define mainji(pi,r) pirr
宏定义的优先级:
当出现宏定义时,首先要进行替换,替换后按照c语言运算符优先级的顺序进行。所以在使用宏时,要确定计算顺序,适当的加上括号
9. 条件编译
- 作用:编译部分代码,编译速度更快
- 用法
1
if 整型表达式
语句1;
elif 表达式
语句2;
elif 表达式
语句3;
else
语句4;
endif
2
ifdef 宏名
语句
else
语句
endif
3
ifndef 宏名
语句
else
语句
endif
- 头文件和另一个c文件
- 多人合作细化编程
- 各种头文件
eg:定义变量的头文件 - 引用头文件
include "头文件名"
相当于赋值头文件内容
- 引用另一个c文件内容
不用引入c文件名
只需声明,即可引用
eg:
int sum(a, b){
}//该函数在非主函数的c文件中
在主函数c文件中,先声明,就可以引用
int sum(a, b);
sum(c,d);
11. 按位运算
按位与:&
按位或: |
按位异或: ^
- 按位与:&
0&0=0,1&1=1,0&1=0
eg:
6:110
5:101
& 100 - 按位或: |
0&0=0,1&1=1,0&1=1
eg:
6:110
5:101
& 111
*按位异或: ^
0&0=0,1&1=0,0&1=1
eg:
6:110
5:101
& 011
- 格式化输出
八进制:%o
十六进制:%x
地址:%p - 按位取反~
eg:
假设一个字节:
5:0000 0101
~:1111 1010
- 原码:数以二进制形式表示
eg:
假设两个字节
5: 0000 0000 0000 0101
-5: 1000 0000 0000 0101
首位表示符号,0为正,1为负 - 反码
正数反码与原码一致
负数反码:将原码按位取反(除了最高位即符号位不变)
-5反码: 1111 1111 1111 1010 - 补码
正数补码与原码一致
负数补码:将原码按位取反(除了最高位即符号位不变),然后加一
-5补码: 1111 1111 1111 1011
编程经验
- 在编程时,不给自己增加无谓的难度。
就直接针对该题解答,做出来才能增加信心 - 写代码时,先把针对性的代码完成,之后再说普适性的问题
eg:
针对性:
for(i=0; i<11; i++){
}
普适性:
for(i=0; i<length; i++){
}
3. 从已知代码中代码编码,提高编码效率。学会复制已有代码
4. 学习了一种调试bug的思想:遇到问题,思考原因,然后验证,使用printf函数
5. 程序执行的顺序
程序时顺序执行的,先从mian开始,顺序执行语句,知道return结束
6. 为什么使用指针操作数组呢?
1可以使用指针这一种方式操作所有的数据类型
2指针效率更高,作用在底层(寻址)
7. int *,指针变量,指针的理解
int *p
- int *是数据类型,整型指针数据类型
- 指针变量p:其中存放地址
- 指针:说的就是指针变量p,简说指针
- 在编程时,多去调试,输出,完善后可以注释掉
其实输出就是一种调试 - 做编程题时,你不是想不到思路,你是想到好多思路,只是不知道那个思路是可行的,所以需要你自己去尝试
- 指针的妙用
- 可以不用出现数组里的下标
- 可以取到数组名的所有值
- 多使用自己不熟悉的知识
eg:while与指针 - 对于出界判断的操作,都是先判断是否出界,再操作