1. 注意区分“=”与“==”,“=”为赋值运算符,“==”为判断是否相等的操作符。

2. 使用如下两条语句可以把输入缓冲区中可能存在的无效数据清理掉 scanf("%*[^\n]");scanf("%*c");
3. ASCII码表中列出所有字符数据两种表示方式之间的对应关系'a' 97;'A' 65;'0' 48
4. 数据类型和占位符的关系
char %c或%hhd
unsigned char %c或%hhu,%hhd和%hhu对应整数表示方式,%c对应字符表示方式
short %hd
unsigned short %hu
long %ld
unsigned long %lu
int %d
unsigned int %u
float %f或%g
double %lf或%lg
%g和%lg会省略小数点后面无效的0
5. 十进制转换二进制的方法:先把十进制数字拆分成多个2的整数次方之和,然后把每个拆分结果单独转换,最后把所有转换结果合并
89 = 64 + 16 + 8 + 1
= 0100 0000 + 0001 0000 + 0000 1000 + 0000 0001
= 0101 1001转换成8个二进制数位并把结果打印在屏幕上
6.十进制转换二进制的第二种方法:除以2取余数倒着写
101 **** ***1
50 0*** ***0
25 00** ***1
12 000* ***0
6 0000 ***0
3 0000 0**1
1 0000 00*1
0 0000 0000
结果是0110 0101
根据前面的方法计算得到的二进制叫原码
计算机里实际记录的是二进制补码
非负数的原码就是补码

7.按位与(&),按位或(|)和按位异或都是双目位操作符它们首先把两个数字转换成二进制补码,然后把两个补码中对应数位上的数字进行计算两个二进制数位上的数字如果都是1则进行按位与计算后结果也是1,否则结果就是0
3 0000 0011
& 5 0000 0101
0000 0001
按位与可以把一个二进制补码中某些数位清0
任何二进制数位和0做按位与计算结果是0,和1做按位与计算结果不变。如果两个二进制数位上有一个是1则对他们进行按位或计算的结果就是1,否则就是0
3 0000 0011
| 5 0000 0101
0000 0111
按位或可以把一个二进制补码中某些数位设置成1
任何二进制数位和1做按位或计算结果是1,和0做按位或计算结果不变。如果对应数位上的数值一样则对他们做按位亦或结果是0,否则结果是1
3 0000 0011
^ 5 0000 0101
0000 0110
按位亦或可以把二进制补码中某些数位求反,任何二进制数位和1做按位亦或会变成相反数值,和0做按位亦或保持不变
有符号数据右移后左边空出来的位置上补充符号位,无符号数据右移后左边空出来的位置上补充0。如果在移位操作过程中没有丢失有效数位则左移n位,相当于乘以2的n次方,右移n位相当于除以2的n次方
8.指针和数组名称的区别:(1)指针可以被赋值,数组名称不可以被赋值(2).对数组名称进行sizeof计算得到数组中字节个数,对指针做sizeof计算得到指针本身存储区的字节个数
(3)一维数组名称取地址后的结果和一维数组名称本身所代表的地址数据一样,它们只是类型不同对指针本身取地址的结果和指针内部记录的地址数据完全无关,可以把指针变量作为循环变量依次处理数组中每个存储区
声明指针变量时const关键字的使用方法
(1)把const关键字写在数据类型前,例如
const int *p_num = NULL;
这种使用方法表示捆绑存储区不可以被赋值
指针本身的存储区可以被赋值
(2).把const关键字写在指针变量名称前,例如
int * const p_num = #
这种指针本身的存储区不可以被赋值
可以通过指针对捆绑存储区进行赋值
9.数组做形式参数的时候真正的形式参数是一个指针,如果在函数中不会修改指针形参所捆绑的存储区则应该在指针形参前加const关键字,指针也可以作为函数的返回值使用,这种使用方法可以间接把多个数据通过返回值传递给调用函数。
C语言中所有文字信息都是用字符串表示的,字符串是由内存中一组连续的字符类型存储区构成的,字符串中使用'\0'字符表示有效字符的结束位置,这个字符的ASCII码就是数字0。所有字符串一定可以采用和第一个字符类型存储区捆绑的字符指针表示
字符串又可以分成两类,每类又有自己专门的表示方式
第一类可以使用字符串字面值的方式表示,例如"abc",
"^&&*^*"等。编译器会自动在字符串字面值后面加'\0'字符
字符串字面值表示的字符串被存储在一个专门的段落里,这个段落在程序运行的时候不可以被修改同样内容的字符串字面值在程序运行过程中只会有一份。
字符数组也可以用来表示字符串,只要字符数组中包含'\0'字符就可以当字符串用,如果想把一个字符数组当字符串使用就必须在程序中向字符数组中放'\0'字符。
可以在程序中使用字符串字面值对字符数组做初始化,使用字符串字面值对字符数组初始化完成后它们之间就没有关系了,字符数组里的字符串在程序运行过程中是可以被修改的。不可以使用操作符直接对字符串进行操作,C语言中提供了一组专门的标准函数,这些标准函数可以用来对字符串做各种处理。
为了使用这些标准函数需要包含string.h文件内容
strlen 这个函数可以计算字符串中有效字符的个数
strcat 这个函数可以把一个字符串的内容合并到一个字符数组中原有字符串的末尾,字符数组最终会记录合并后的字符串。
这个函数用返回值表示合并后的字符串
这个函数有可能修改不属于这个数组的存储区,因此它是有危险的。
strncat 这个函数的功能和strcat类似, 它比strcat函数多一个整数类型的参数,这个参数表示最多可以从后一个字符串中合并多少个字符内容到字符数组中,如果使用得当这个函数可以避免危险
strcmp 这个函数可以比较两个字符串是否一样,
它把两个字符串对应位置上的字符进行ASCII码的比较
ASCII码大的字符所在的字符串就大,这个函数通过返回值表示比较结果,如果前一个字符串大则返回1,如果后一个字符串大则返回-1,如果一样大则返回0
strncmp 这个函数也可以比较两个字符串的大小,它比较的是前n个字符,它比strcmp多了一个整数类型的参数,这个参数表示要比较的字符个数
strcpy 这个函数可以把一个字符串复制到 一个字符数组中,这个函数的返回值可以表示复制得到的新字符串
strncpy 这个函数只会把后一个字符串中的 前n个字符复制到字符数组中这样可以避免发生错误
可以使用%s作为占位符把一个字符串打印在屏幕上
可以使用%s做占位符在scanf语句中从键盘得到一个字符串并记录在一个字符数组中
和%s占位符对应的数据应该是数组名称,不需要再取
地址了
使用这种方式从键盘获得字符串可能遇到两个问题:
(1)如果输入内容中包含空格字符则只能获得空格字符
前的内容
(2)如果输入内容多于数组中存储区个数则会出现严重
错误
fgets函数可以从任何文件中获得字符串
在Linux系统中键盘可以被当作文件看待,这个文件叫
标准输入文件,用stdin表示
fgets函数需要三个参数
(1)字符数组的名称(得到的字符串记录在这个数组中)
(2)数组中包含的字符类型存储区个数
(3)要读取的文件(stdin表示键盘)
这个函数有可能把输入时的回车字符也读入到字符
数组中,
在得到字符串以后要清理可能存在的垃圾数据,只有当字符数组中没有'\n'字符的时候才需要清理垃圾数据
10.任何程序中对文件的操作分如下三歩:打开文件,操作文件和关闭文件
(1).fopen函数用来打开文件
(2)fread/fwrite函数用来操作文件(在文件和内存之间进行二进制内容的拷贝)
(3)fclose函数用来关闭文件
fopen函数需要两个参数,第一个参数是一个文件路径,第二个参数是打开模式(决定可以对文件做什么)
打开模式的使用方法如下
"r" 这种打开模式决定只能察看文件内容
不能修改文件内容必须从文件头开始察看文件必须已经存在
"r+" 这个打开模式比"r"的打开模式增加了修改功能
"w" 这种打开模式决定只能修改文件内容而不能察看文件内容,必须从文件头开始,如果文件还不存在则创建新文件,否则删除文件原有内容
"w+" 这种打开模式比"w"增加了察看功能
"a" 这种打开模式也只能修改文件内容而不能察看,这种打开模式的修改方式是在文件内容的末尾追加新内容,如果文件不存在则创建新文件,否则不会修改文件原有内容
"a+" 这种打开模式比"a"增加了察看功能
"b"可以和上面的任何一种打开方式混用
如果要以二进制方式对文件进行操作就应该使用它
fopen函数有可能会失败,如果返回值是空指针则表示打开失败
每当结束对文件的所有操作后必须使用fclose函数关闭文件
需要用文件指针作为参数,操作完成后文件指针成为野指针,必须清成空指针
fwrite函数可以把内存中一组连续存储区里的二进制内容拷贝到文件中
fread函数可以把文件中一组连续字节的二进制内容拷贝到内存中一组连续的存储区里
它们的参数如下
(1)内存中连续存储区的首地址(通常是数组名称)
(2)单个存储区的大小
(3)希望操作的存储区个数
(4)文件指针
返回值表示实际操作的存储区个数
11.文件位置指针是一个整数,他用来记录下一次对文件进行读写操作的时候开始位置到文件头之间包含多少个字节
当从文件中读出n个字节或者向文件中写入n个字节的之后文件位置指针都会自动向后移动n个字节
可以在程序中使用函数察看或者修改文件位置指针的数值
ftell函数可以察看文件位置指针的数值,返回值就是当前位置指针的数值
rewind函数可以把文件位置指针的数值设置成0
fseek函数可以把文件位置指针调整到文件中任何位置上
可以采用三种办法指定文件中某个位置
三种方法的本质一样,都是需要指定一个基准位置,然后指出目标位置到基准位置之间的距离(如果目标位置在后则距离是正的,否则是负的)
SEEK_SET 0 文件头作为基准位置
SEEK_CUR 1 当前位置指针位置作为基准位置
SEEK_END 2 文件尾作为基准位置
12.fscanf可以从文件中获得多个字符代表的数字并记录在存储区里,
fprintf可以把存储区的内容按照格式转换成字符串并把转换结果记录到文本文件中。

posted on 2015-12-05 14:01  LyndonYoung  阅读(229)  评论(0编辑  收藏  举报