c语言总结2021

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组成的数。如:0126050000
输出格式符:%o
  • 十六进制的表示:
0X或0x开头,由0~9、A~F、a~f组成。如:0x12A0x5a000
输出格式符:%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); 
}  

  • [ ]
  • 结束
  1. 行指针与列指针
  • 行指针
int a[3][5];

在这里插入图片描述

  • 列指针
    在这里插入图片描述
  • 对指针有意义的初始化值只能是0或者是表示地址的表达式
  • 常量0可以赋值给指针,指针也可以和常量0进行比较
  • 任何指针与0进行相等或者不等的比较运算都有意义
  • [ ]
  1. 结构体
  • 结构体变量在程序执行期间所有成员一直驻留在内存中。
struct
{
	int len;
	char *next;
}*p;
  • *p->str:指针str所指向的对象的值
  • *p->str++:先读取指针str指向的对象的值,再将str+1
  • (*p->str)++:将指针str指向的对象值+1
  • *p++ ->str:先读取指针str指向的对象的值,再将p+1
  • 两个指针之间的假发运算是非法的,减法合法
  1. 枚举类型
  • 首元素默认值为0
  • 相邻元素默认插值为1
  1. C语言中几种类型所占字节数
    在这里插入图片描述

  2. 关于几个循环的总结:

  • continue:结束本次循环,直接进入下一次循环
  • break:跳出循环,执行后面的语句
  • return:跳出当前循环所在的函数
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是快卡黎嫩哦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值