总体
概念常见
第一章
第三章
第三章
第四章
第五章
第六章
第七章
-> 和 . 区别:
一个是指针调用其变量
一个是对象调用其变量
总体
1.程序结构的三种:顺序结构、循环结构、选择结构 。
2.读程序都要从 main() 入口,然后从最上面顺序往下读 。
3.计算机的数据在电脑中的保存是以二进制的形式,数据存放的位置是他的地址 。
4.bit 是位,指的0或者1。byte 是指的字节,一个字节八位
5.二进制转为10进制的方法
概念常见
1.编译预处理不是C语言的一部分,不再运行时间呢。C语言编译的程序称为源程序,它以ASCII数值存放在文本文件中。
2.每个C语言程序中 main 函数是有且只有一个
3.在函数中不可以再定义函数
4.算法是一定有输出的,它可以没有输入
5.break 可用于循环结构和 switch 语句
6.逗号运算符的级别最低
第一章
1、合法的用户标识符
- 合法的要求是由字母、数字、下划线组成。有其他的元素就错的。
- 第一个必须是字母或者是下划线。第一个不能是数字
- 关键字不能作为用户标识符。main define scanf printf 都不是关键字,迷惑的地方:If是可以作为用户标识符,因为If中的第一个字母是大写的,所以不是关键字
2、实型数据的合法形式:2.333e-1 就是合法的,且数据是
- e 前 e 后必有数,e 后必为整数
3、字符串数据的合法形式
- '1' 是字符,占一个字节, “1” 是字符串,占两个字节(含有'\0')
- '0' 的ASCII数值表示为48,'a' 的ASCII数值表示为97, 'A' 的ASCII数值表示为65
4、整型一般是2个字节,字符型是1个字节,双精度一般是4个字节
- 在 16 位编译系统上或者是32位系统,直接按照这样做就好
5、转义字符的考察
- 在程序中 int a = 0x6d, 是把一个十六进制的数给到变量 a。注意这里的0x 必须存在
- 在程序中 int a = 06d,是一个八进制的形式
- 在转义符中,'\x6d' 才是合法的,0不能写,并且x是小写
- '\141' 是合法的,0不能写
- '\108' 是非法的,不能出现8
6、算数运算符的优先级
- 同级别从左到右
7、强制类型转换
- 一定是 (int) a,而不是 int (a),注意括号
- 注意 (int) (a+b) 和 (int) a+b 的区别。前是把 a+b 转型,后是把 a 转型再加 b
8、表达式的考察
- 注意逗号表达式:优先级别最低,表达式的数值逗号最右边的那个表达式的数值
- (2, 3, 4) 的表达式的数值就是4
9、位运算的考察
- 先把十进制转为二进制,然后做了位运算,再转为十进制
10、三种丢小数的情况
- int a = 1.6
- (Int) a;
第三章
1、printf 函数的格式考察
- %d整形;%c字符;%f单精度;
- %ld long int;%lf double
2、scanf 函数的格式
- 注意该函数的第二部分是 &a 这样的地址
3、putchar,getchar
- char a = getchar(); 是没有参数的,从键盘直接输入你的一个字符变量 a
- putchar('y') 把字符 y 输出到屏幕中
4、实现两个变量的互换
5、实现保留三位小数,第四位 四舍五入
第三章
强调:C语言中,用非0表示逻辑真,用 0 表示逻辑假
1、关系表达式:
表达式的数值只能为 1(真),或0(假)
当关系的表达式为真的时候得到1,如果 9>8这个是真的,所以数值是 1
2、逻辑表达式
- 只能为1(真),或0(假)
- 共有 && 、|| 、! 三种逻辑运算符
- ! > && > || 优先级的级别
- 注意短路现象「 &&前面是0时,&&符号后面的不计算.||前面不是0时,||号后面的不计算 」
- 要表示 x 是比 0 大,比 10 小的方法。0(0
3、if 语句、switch
第四章
1、三种循环结构
- for
- while
- do-while
2、break 和 continue 的差别
第五章
函数:是具有一定功能的一个程序块
- 注意点:实参和形参之间传递数值,和传地址的差别
- 传数值的话,形参的变化不会改变形参的变化
- 传地址的话,形参的变化就会有可能改变实参的变化
第六章
指针变量是用来存放地址的
1、int * p 中 *p和p的区别:
- *p可以当做变量来用,* 的作用是去后面 p 中的地址
- p 是可以当做地址来使用的
2、* p++ 和 (*p)++ 之间的差别
- * p++ 是地址的改变
- (* p)++ 是数值的改变
3、三名
- 数组名:表示第一个元素的地址,数组名不可以自加,他是地址常量名「 *(a+1)可以, *(a++)不可以」
- 函数名:表示函数的入口地址
- 字符串常量名:表示第一个字符的地址
第七章
1、一维数组的重要概念,对 a[10] 进行讨论
- a 表示数组名,是第一个元素的地址,也就是 a[10] 的地址
- a 是地址常量,所以只要出现a++,或者 a=a+2 的赋值都是错误的
- a 是一维数组名,所以他是列指针,也就是说 a+1 是跳一列
2、对 a[3][3] 的讨论
- a 表示数组名,是第一个元素的地址,也就是 a[10] 的地址
- a 是地址常量,所以只要出现a++,或者 a=a+2 的赋值都是错误的
- a 是一维数组名,所以他是列指针,也就是说 a+1 是跳一行
- a[0], a[1], a[2] 也都是地址常量,不可以对它进行赋值操作,同时他们都是列指针,a[0]+1, a[1]+1, a[2]+1都是跳一列
- 注意 a 和 a[0], a[1], a[2] 都是不同的,他们的基类型是不同的。前者是一行元素,后三者是一列元素
3、二维数组做题技巧
如果有 a[3][3] = {1, 2, 3, 4, 5, 6, 7, 8, 9}
步骤一:把他们写成
列一 列二 列三
a[0] 1 2 3 -> 第一行
a[1] 4 5 6 -> 第二行
a[2] 7 8 9 -> 第三行
- 步骤二
*(a[0]+1) 我们就知道是第一行的第一个元素往后跳 1 列,那么,这里就是 a[0][1] 的元素,所以就是 1
*(a[1]+2) 我们就知道是第一行的第二个元素往后跳 2 列,那么,这里就是 a[1][2] 的元素,所以就是 6
4、二维数组的定义形式
- 一定需要指定列 例如:a[][N] ,因为是按照一维数组的形式存储,指定列数量,就可以严格按照列进行切分
5、二维数组中的行指针
- int a[1][2],其中 a 就是一个行指针,a+1跳一行,搭配 (*)p[2] 指针
- a[0]、a[1] 是一个列指针,a[0]+1 跳一个数组元素。搭配 *p[2] 指针进行使用
- a[2] -> *(a+2)
- a[2][3] -> *(a+2)[3] -> *(*(a+2) + 3)
作者:Johngo
配图:Pexels
欢迎大家留言,点个 在看 ,也可以分享到朋友圈 互联网广告收入占到互联网收入的80%以上 计算广告,一起研究 流量变现 ,欢迎大家的加入