1. 如何识别转义字符?
以 \ 开头,最少1位,最多3位,必须是合法的8进制数字,即0~7。
例如:“\012”合法、“\08”中的\0则位结束符。
常见转义字符如下:
2. 关于字符数组长度的判别:
char a[] = “ABCDEF”;
char b[] = {‘A’,‘B’,‘C’,‘D’,‘E’,‘F’};
A、a与b中都存放字符串
B、a数组比b数组长度长 (✔)
C、a与b长度相同
D、a与b完全相同
- 如果初始数据的个数少于字符数组的长度,剩余的元素系统自动赋予’\0’
- 字符数组只有在定义时,才能将整个字符串一次性地赋值给它。
char name[10];
name="abc123"; //错误
- [ ]
3. 指针变量的运算:
1 .对于基类型相同的两个指针变量之间不能进行 + 的运算。
4. 基本数据类型之间的运算
参加位运算的数据只能用于整型操作数。
关系运算符<=与==的优先级不同。
c语言中"%"运算符的运算对象必须是整型。
运算优先级从高到低--> 算术运算符、关系运算符、赋值运算符
5. 函数相关数据处理
如果函数值的类型和return语句中表达式的值不一致,则以函数类型为准。
6. 关于八进制、十进制、十六进制的转换与识别:
- 十进制的表示:
以1~9开头,0~9组成。如:128、-234、-278
输出格式符为:%d(有符号十进制整数)
- 八进制的表示:
以0开头,以0~7组成的数。如:0126、050000
输出格式符:%o
- 十六进制的表示:
以0X或0x开头,由0~9、A~F、a~f组成。如:0x12A、0x5a000
输出格式符:%x
- 其他进制转十进制:
二进制–>十进制:
从最低位开始,将每个位上的数提出来 * (位数-1)次方,然后求和。
二进制 1011=1 * 1 + 1 * 2 +0 * 4 + 1 * 8 = 11.
八进制–>十进制:
从最低位开始,将每个位上的数提出来写 8 * (位数-1)次方,然后求和。
八进制 0123 = 3 * 1 + 2 * 8 + 1 * 64 = 83
十六进制–>十进制:
从最低位开始,将每个位上的数提出来写 16 * (位数-1)次方,然后求和。
十六进制 0x34A = 10 *1 + 4 * 16 + 3 * 16 * 16 = 842
- 十进制转其他进制
1. 十进制–>二进制:
将该数不断÷2,直至商为0;
然后将每部得到的余数倒过来,就是对应的二进制。
例如56转换成2进制:
56/2=28 …… 0
28/2=14 …… 0
14/2=7 …… 0
7/2=3 …… 1
3/2=1 …… 1
1/2=0 …… 1
即对应的二进制为-->111000
2. 十进制–>八进制
将该数不断÷8,直至商为0;
然后将每步得到的余数倒过来,就是对应的八进制
将156转换为8进制:
156/8 = 19 …… 4
19/8 = 2 …… 3
2/8=0 …… 2
即对应的八进制结果为-->0234
3. 十进制–>十六进制
将该数不断÷16,直至商为0;
然后将每步得到的余数倒过来,就是对应的十六进制
将356转换为8进制:
356/16 = 22 …… 4
22/16 = 1 …… 6
1/16=0 …… 1
即对应的十六进制结果为-->0x164
- 二进制转其他进制
1. 二进制–>八进制
从最低位开始,将二进制数每三位一组分组,不够用0补充
将每一组转换成对应的八进制即可
eg:将11010101转换成八进制
分三组:
101-->5
010-->2
011-->3
对应八进制数-->0325
2. 二进制–>十六进制
从最低位开始,将二进制数每四位一组分组,不够用0补充
将每一组转换成对应的八进制即可
eg:将11010101转换成十六进制
分两组:
0101-->5
1101-->13
对应十六进制数-->0xD5
- 其他进制–>二进制
1. 八进制–>二进制
将八进制的每一位,转换成对应的一个三位的二进制数即可
eg:将0237转换成二进制
分三组:
7-->111
3-->011
2-->010
对应二进制数-->10011111
2. 十六进制–>二进制
将十六进制的每一位,转换成对应的一个四位的二进制数即可
eg:将0x23B转换成十六进制
分三组:
B-->1011
3-->0011
2-->0010
对应十六进制数-->1000111011
7. 位运算
设变量a的二进制数是00101101,若想通过运算a^b使a的高4位取反,低4位不变,则b的二进制数应该是_____
答案: 11110000
8. 运算中优先级的判定
struct st
{
int x, y;
};
struct st a[4] = { {10,20},{30,40},{50,60},{70,80} };
int main()
{
struct st* p = a;
printf("%d\n", p++->x); //10
printf("%d\n", ++p->y); //41 注意运算符的优先级
printf("%d\n", (a + 3)->x); //70
return 0;
}
9. 运算符的优先级与求值次序
- 取模运算符不能应用于double或float型
- const只限定处于它后面的内容
- 按位异或运算符用于当两个操作数对应位不相同时将该位置为1,否则就置为0.
- 一元运算符~:用于求整数的二进制反码,分别将操作数各二进制位上的1变成0,0变成1。
- [ ]
11. 文件打开方式:
12. 文件相关函数操作总结:
- 文件类型的指针
FILE *fp;
- 中间
- 打开文件
FILE *fp;
fopen("data.txt","w");
//文件名,文件打开方式
if (fp == NULL)
{
printf("文件打开失败.\n");
exit(0);
}
- 关闭文件
fclose(fp);
//关闭成功则返回0,错误则返回EOF
- 从文件中**格式化方式读取数据(适用于文本文件读写):fscanf**
fscanf(fp,"%d %s %f",&x,str,&y);
- 向文件中格式化方式写入数据(适用于文本文件读写):fprintf
fprintf(fp,"%d",x);
- fgetc()与fputc()----字符方式读写文件
//将键盘输入的文字显示到控制台
char ch;
ch = fgetc(fp); //从文件里读取一个字符
fputc(ch,fp); //把字符写到文件指针所指向的文件中
- fgets()与fputs()----字符串方式读写文件
//从文件中读出或者写入字符串
char *fgets(char *str,int n,FILE *fp); //格式说明
char *fputs(char *str,FILE *fp); //格式说明
fgets(sname,11,fp); //sname数组最小长度不能低于11
fputs(ch[i],fp); //遇到'\0'停止写入
fputs("\n",fp); //本身不提供换行符
- 数据块读写文件:fread()与fwrite()
//按照二进制的形式对文件进行读写操作,即"rb"或"wb"
fread(buffer,size,count,fp);
fwrite(buffer,size,count,fp);
----------------------------------------------------
//起始地址,数据块大小,数据块数量
char data;
//使用fread与fwrite必须使用二进制方式打开
fp1 = fopen("student.txt","rb");
fp2 = fopen("stu_bak.txt","wb");
//从fp1文件读取一个字节的内容到变量data
fread(&data,sizeof(char),1,fp1);
while(!feof(fp1)) //fp1指向的文件未读完,继续读
{
//把变量data的内容写到fp2文件
fwrite(&data,sizeof(char),1,fp2);
fread(&data,sizeof(char),1,fp1);
}
----------------------------------------------------
- fseek函数:移动文件位置指针
fseek() //一般用于二进制文件
fseek(fp,100L,0); //开始位置向后移到100个字节处
fseek(fp,100L,1); //当前位置向后移到100个字节
fseek(fp,-100L,1); //当前位置向前移到100个字节
fseek(fp,-100L,2); //末尾位置向前移到100个字节
- rewind()函数:让指针重新指向文件开始位置
rewind(fp);
- [ ]== feof()函数==
/*函数原型*/
int feof(FILE *fp);
while( !feof(fp) )
{
printf("%c: %x \n", c, c);
c=fgetc(fp);
}
- [ ]
- 结束
- 行指针与列指针
- 行指针
int a[3][5];
- 列指针
- 对指针有意义的初始化值只能是0或者是表示地址的表达式
- 常量0可以赋值给指针,指针也可以和常量0进行比较
- 任何指针与0进行相等或者不等的比较运算都有意义
- [ ]
- 结构体
- 结构体变量在程序执行期间所有成员一直驻留在内存中。
struct
{
int len;
char *next;
}*p;
- *p->str:指针str所指向的对象的值
- *p->str++:先读取指针str指向的对象的值,再将str+1
- (*p->str)++:将指针str指向的对象值+1
- *p++ ->str:先读取指针str指向的对象的值,再将p+1
- 两个指针之间的假发运算是非法的,减法合法
- 枚举类型
- 首元素默认值为0
- 相邻元素默认插值为1
-
C语言中几种类型所占字节数
-
关于几个循环的总结:
- continue:结束本次循环,直接进入下一次循环
- break:跳出循环,执行后面的语句
- return:跳出当前循环所在的函数