C语言速通课笔记
- 一个C语言程序有且只有一个main函数,是程序运行的起点。
- 每个C语言程序写完后,都是先编译 .c后链接.obj最后运行..exe
- .c和.obj文件是无法运行的,只有.exe文件才可以运行
- 标识符由字母,数字,下划线组成并且第一个必须为字母或下划线
- 标识符分为关键字,预定义标识符,用户标识符
- 严格区分大小写
- 尽量采用能说明程序对象意义的标识符
- 十进制转化成二进制除以二倒序取余,小数部分是乘以二正序取整
- C语言只有八,十,十六进制,没有二进制;但在运行的时候所有的进制都要转化成二进制来进行处理
- 八进制是以0开头的,没有8,逢8进1
- 十六进制是以0x开头
- 小数的合法写法:C语言小数点两边有一个是零的话,可以不用写,如:0.3可以写.3
- 实型数据的合法形式:e前e后必有数,e后必为整数
- 整数和浮点型型一般是4个字节,字符型是1个字节,双精度型一般是8个字节
- /两边都是整形的话,结果就是一个整形,如果有一边是小数,那么结果就是小数,小数默认的是双精度形式,一共有八位
- 如果参加运算的两个数中有一个数为实数,则结果是实数
- %只能对整数进行操作
- 在定义时不可以连续赋值如:int x=y=10是错误的
- 等号的左边一定是一个变量,不可以是常量
- int x=7.7(那么x的值是7)
- float y=7(那么y就是7.0)
- ++在前先加后用,++在后,先用后加(一般在for循环用)
- 逗号表达式:优先级别最低。表达式的数值是逗号最右边的那个表达式的数值
- z=(2,3,4)这个时候z的值为4,整个是赋值表达式
- z=2,3,4这个时候z的值为2,这个是逗号表达式
- x=(a=3,6×a) a=3 x=18
- x=(a=3×5,a×4) 表达式的值30,x=60
- 空语句不可以随意执行,会导致逻辑错误
- 要注意(int)(a+b)和(int)a+b的区别
- 三种取整丢小数的情况 1.int a等于1.6,2. b=(int)a 3. 1/2
- 字符数据的合法形式:'1'是字符,占一个字节,"1"是字符串占两个字节(其中含有一个结束符号)
- '0'是ASCLL数值表示48,'a'的ASCLL的数值是97,'A'的ASCLL数值是65
- 单个字符一定要用单引号
- ,俩个字符及以上一定要用双引号如:'65',"1"是错误的形式
- 字符是可以进行算数运算的,记住'0'-0=48
- 大写字母和小写字母的转化方式'A'+32='a',相互之间一般是相差32
- 转义字符分为一般转义字符,八进制转义字符,十六进制转义字符(和ASCLL码相关)
- 一般转义字符:背诵\t(指的是电脑上的tab键,水平制表键,空四格)\n换行,\'代表\,\"代表",\\代表\\
- 八进制转义字符:'\141'是合法的,前面的0不能写
- 十六进制转义字符:'\x6d'才是合法的,前面的0不能写,而且x是小写
- 字符型和整型是近亲:两个具有很大的相似之处,所有的字符都有一个它对应的整形数据的ASCLL的数值。如 char a =65 %c之后输出为A,%d输出为65
- 使用printf和scanf函数的时候,要在最前面加上#include〈stdio.h〉
- printf可以只有一个参数,也可以有两个参数
- %d输出的十进制数
- %o输出的是八进制,但是不好辨认输出的是八进制还是十进制一般用%#o(带前导的八进制)
- %x表示的十六进制,但是不好辨认,所以我们一般用%#x
- 数据转化 %md,如果数据的位数小于m,则左端补空,若数据位大于m,则按实际长度输出
- 数据转化 %m.nf 如果数据的位数小于m,则左端补空(0);如果数据位数大于m,则按实际长度输出。小数位数被截断时按四舍五入输出
- 在scanf中加&是取地址,加*是取数值,所以不能在里面输指针
- scanf可以指定输入长度如:终端输入1234567 scanf("%2d%4d%d",&x,&y,&z);x为12,y为3456,z为7(如果输入空格的话,空格也占一位)
- 在scanf中超过规定的长度,按原长度输出如:终端输入12,scanf("%d",&x),x为12
- 输入时候字符和整数的区别 scanf("%d",&x);这时候输入1,特别注意表示的是整数1 scanf("%c",&x);这时候输入1,特别注意表示的是字符'1'ASCLL为整数49(如果你想让它以整形数据来表示的话)
- putchar 和 getchar函数的考察(因为都有一个char,所以它操作的只有一个字符型的数据)
- char a =getchar()是没有参数的,从键盘得到你输入的一个字符给变量a
- putchar('y')把字符y输出到屏幕上
- getchar一次只能输入一个字符,如果你想输入多个字符的话,就要用到gets
- 一定记住=是赋值,==才是等号
- !运算,如果0取非是真的,任何非0数字取非它的结果都为假(任何非零数字取非之后都为1
- switch只可以和break一起用,不可以和continue用
- switch(x) x:是整形常量(1,2,3......),字符型常量(a,b...),枚举型数据(Monday ...)
- for只管后面的一个语句
- while(真条件),程序才会往while里运行
- 指针变量的本质是用来放地址的,而一般的变量是用来放数值的
- *p在用过之后,后面可以直接用p
- *p是去取数值,p=&x则是取地址
- *p可以当做变量来用,*的作用是取后面地址p里面的数值
- *p++是地址变化
- (*p)++是数值发生变化a(因为++的优先级高于*)
- *p:一级指针:存放变量的地址
- **q:二级指针:存放一级指针的地址(不可以放变量的地址,只能放一级指针的地址)
- **q=&x的写法是错的,因为二级指针只能放一级指针的地址,不能放变量的地址
- 数组名是不可以自加的
- 在一维数组中,a是一维数组名,所以它是列指针,也就是说a+1是跳一列(往左跳)
- 在二维数组中,a是二维数组名,所以它是行指针,也就是说a+1跳一行
- 记住以下形式:a(2)变成*(a+2)
- a[2][3]变成*(a+2)[3],再可以变成*(*(a+2)+3)
- 字符串:strlen()字符串测长度其中str是字符串,len是长度
- strcat()字符串连接函数
- strcmp()字符串比较函数
- strcpy()字符串拷贝函数
- sizeof查看是内存的形式,比如一个int四个字节,而strlen只是看字符串有多长的操作
- 函数指针的用法:add(int x,int y) f=add赋完值之后,合法的调用形式为add(2,3)或f(2,3)或(*f)(2,3)
- scanf不能接受空格
- gets你输入啥它就接受啥
- 在预处理中〈〉是C语言里面有的一个库,如果你想自己写一个文件的话用""
- 一个文件必须要有main函数是错的,因为每一个c程序必须要有,而你直接写的一个函数可以没有
- 头文件一定是以.h结尾吗,不是,.h结尾的是系统给你的,你自己写的话一般用.c