C语言基础知识小结

C语言基础知识小结

第一章

编译语言:c语言 c++
脚本语言:python
C语言诞生于贝尔实验室。
C程序的后缀是 .c .h
Python的后缀是 .py

1.屏幕截图快捷键

prt sc(关机键左侧) 屏幕截图快捷键 打开画图板,ctrl+v即可保存。
cpu 控制处理单元
cu 控制
pu 处理

在这里插入图片描述

编译器:将c语言翻译成cpu可识别的语言(机械指令)。
编译器4步骤:预处理-编译-汇编-链接 完整的2进制机械指令程序。
在这里插入图片描述

gcc 文件.c 编译器 生成可执行程序 a.out
gcc 文件.c -o 文件名 文件编译为文件名,不使用默认的名称“a.out” object(

2.补全文件快捷键 tab

tab 命令行中,自动补全文件名
在这里插入图片描述
在这里插入图片描述

stdio.h standard input
void main() 无返回值
注释
在C语言中添加注释是一个好的编程习惯,可以增强程序的可读性。
// 行注释
/*
*/
#if 0
#endif
在这里插入图片描述

第二章 变量和数据类型

1.基础

项目-文件-函数-语句-变量、常量 –表达式
数据类型:
1.基本类型:
char(字符型),int(整型),short(短整型),long(长整型),float(单精度浮点型) double(双精度浮点型)
1字节 占8位 32位
在这里插入图片描述

2.构造类型:数组、指针、结构体
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

ASC码:

0 48
a 97
A 65

转义字符:

\n 换行
\t 水平制表符
\b 退格

格式符:

%d 整型 数字
%c 字符 汉字、英文字母
%f 浮点型 小数
%x 十六进制
%o 八进制
在这里插入图片描述

进制前缀

进制 前缀
在这里插入图片描述

2.浮点型常量e

表示方法:
(1)12.56 0.23 1.45
(2)12e-1 5e-3
E左边必须有数据,e右边必须有整型数据
格式符: %f %lf

2.变量

C语言变量命名规则

1.数字、字母、下划线都可以为变量命名
2.作为变量名的开头不能为数字 3a_是错的 a_3 或 _a3是对的
3.变量名不能为关键字 像if else printf 等等都不能
蓝色的不可以做变量名

(1)声明变量

声明变量:Datatype variablename
在这里插入图片描述

1.变量声明
2.变量初始化 给变量赋值
3.使用变量
在这里插入图片描述
在这里插入图片描述

(2)输入输出函数

& 取址(地址)符
printf 输入函数
scanf 输出函数
scanf中不能加换行

(1)printf加强功能:宽度管理

实际用于开发时表格的打印
a.整数宽度:
右对齐占8个位置, 例如:printf(“%8d %8d”,32,n);
左对齐占8个位置, printf(“%-8d%-8d”,32,n);
左对齐填充0无效、右对齐有效、占8个位置, printf(“%-08d%08d”,32,n)
%08x 16进制数填充0,占8个位置 printf(“0x&08x 0x%08x”,32,n);
b.字符串
右对齐占10个字符 printf(“你的姓名是:%10s”,s);
左对齐 printf(“你的姓名是:%-10s”,s)
c.浮点数
右对齐,3个小数位 printf(“工资:%16.3f”,8001.5);
左对齐,3个小数位 printf(“工资:%-16.3f”,8001.5);

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

printf 输入函数
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
printf(“格式,格式”,变量,变量)
scanf(“格式格式”,&变量,&变量)

(3)一元运算算术符

运算符优先级
“+” >”=”
在这里插入图片描述
在这里插入图片描述

(4)类型转换

在这里插入图片描述

1…getchar 字符输入

getchar()函数只能输入一个字符型的值,而scanf()函数除了字符型,还可以输入多种数据类型的值,包括整型、浮点型等

2…putchar 字符输出

putchar函数只能用于单个字符的输出,且一次只能输出一个字符
在这里插入图片描述

字符型转换成整型基本没什么问题,但反过来就可能zd会出问题了。因为在C语言中,整型一般是两个字节(int型回两个,long型4个,short int型一个),字符型为一个字节(无符号的为两个),一个字节转两个没问题,两个转一个就可能出现溢出问题。比如答 char a=255,就会溢出,因为a表达的范围只是-128~127

(5)static作用:

被static修饰的全局变量,extern无法从外部找到

1、修饰函数的局部变量:

特点:有默认值0,只执行一次,运行一开始就开辟了内存,内存放在全局

2、修饰全局函数和全局变量:

特点:只能在本源文件使用

3、修饰类里面的成员变量:

特点:和1差不多,定义多个static y,但只有一个y,不进入类的大小计算,不依赖于类对象的存在而存在(可直接调用,要进行外置声明)

4、修饰类的成员函数:

特点:f():括号里无this指针,只能调用他的本类静态函数和他的静态变量,即是用static修饰过的不依赖于类对象的存在而存在(可不进行外置声明,直接调用)
在这里插入图片描述

(6)变量的三大属性

1.作用域

全局变量:函数外部定义的变量
局部变量:函数内部定义的变量
定义:变量的使用范围
分类:文件作用域、函数作用域、代码块作用域、原型作用域
全局变量、局部变量、 局部变量、 函数参数形式
在这里插入图片描述

2.链接属性(针对文件来说)

内部链接属性:不同模块间同名的变量是不同实体 (不同文件的同名变量是两个变量)extern
外部链接属性:不同文件的同名变量是同一变量 static

4.存储属性

静态存储(全局变量):变量定义时候申请的空间 extern, static
动态存储(栈):用的时候申请,不用的时候就释放的空间。 局部变量
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(7)错题集

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

第三章 运算符

(2)赋值运算符

最简单的运算符 =
在这里插入图片描述

*复合赋值运算符
运算顺序:自右向左
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(3)关系运算符

在这里插入图片描述

== 等于 != 不等于

  大于          >=      大于等于

< 小于 <= 小于等于

(4)条件结构

在这里插入图片描述
在这里插入图片描述
只有一条语句的时候,“{}”可以省略不写
在这里插入图片描述

(5)逻辑运算符

与:一假则假,
或:一真则真,两假则假
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

(6)sizeof运算符(单目运算符)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

*2逗号运算符(优先级最低)
在这里插入图片描述

结果为8

(7)运算符优先级

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(8)特殊运算符

(1)位运算符号:

a)<< 左移运算符:i << n的结果是i*2的n次方
b)>> 右移运算符:i >> n的结果是i/2的n次方
在这里插入图片描述

(2)逗号运算符

逗号运算符的特点是:
a)从左向右依次运算,b)最终结果采取最右边的结果;

(3)位运算:

& 按位与:相同位的两个数字都为1,则为1;若有一个不为1,则为0。
(两个数字按位与运算,当没有重叠位时结果是0 )
| 按位或:相同位的两个数字都为0,则为0;若有一个不为0,则为1。
(两个数字按位或运算,当没有重叠时就是加法)
~ 按位取反:单目运算,将一个数字所有二进制位0变1,1变0。
(无符号时相当于最大值减自己,有符号相当于乘-1,正变负时绝对+1,负变正绝对值-1)

^ 按位异或:双目运算,当相同位的两个数字相同时为0,不同时为1。
(两次次跟同一个数字^运算结果,恢复原来之前数值)

(4)位运算的实际应用:

| 用来将一些标志量组合在一起,如果没有有重叠会加入该标志,已经有重叠的标志量会忽略;
& 用来判断一些组合后的标志混合变量中,是否包含指定的标志量;或者用来清理大部分位为0
~ (&)用来删除一个标志混合变量中的某个属性;
附录:符号优先级

1级优先级 左结合
() 圆括号 []下标运算符 ->指向结构体成员运算符 .结构体成员运算符
2级优先级 右结合
! 逻辑非运算符  ~ 按位取反运算符  ++ 自增运算符  – 自减运算符  - 负号运算符   (类型) 类型转换运算符  * 指针运算符  & 地址与运算符  sizeof 长度运算符
3级优先级 左结合
  * 乘法运算符   / 除法运算符   % 取余运算符
4级优先级 左结合
  + 加法运算符   - 减法运算符
5级优先级 左结合
  << 左移运算符   >> 右移运算符
6级优先级 左结合
  <、<=、>、>= 关系运算符
7级优先级 左结合
  == 等于运算符   != 不等于运算符
8级优先级 左结合
  & 按位与运算符
9级优先级 左结合
  ^ 按位异或运算符
10级优先级 左结合
  | 按位或运算符
11级优先级 左结合
  && 逻辑与运算符
12级优先级 左结合
  || 逻辑或运算符
13级优先级 右结合
  ? : 条件运算符
14级优先级 右结合
  += -= *= /= %= =  >>= <<=  &= ^= |=
全为赋值运算符
15级优先级 左结合
, 逗号运算符

(5)前++和后++(–)的区别:

a)前++(–)等价于在当前语句执行之前先执行自增(自减)运算;
例如:printf("++i=%d\n",++i);
等价于:i += 1;
printf("++i=%d\n", i);
b)后++(–)等价于在当前语句执行之后再执行自增(自减)运算;
例如:printf(“i++=%d\n”,i++);
printf(“i++=%d\n”, i);
i += 1;

(6)附录、右移运算的注意事项:

a)对于有符号变量:
当最高位为1时,高位移动剩余位置填充1;
当最高位为0时,高位移动剩余位置填充0;
b)对于无符号变量:
高位移动剩余位置统一填充0;

(9)综合示例

###
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(10)作业

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

第四章.条件结构

(1)多重条件结构

在这里插入图片描述

(2)多重if结构

在这里插入图片描述

(3)嵌套if函数

在这里插入图片描述
在这里插入图片描述

(4)switch

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(5)作业

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
g重量,
在这里插入图片描述

(6)pow函数

在这里插入图片描述
在这里插入图片描述

2的5次方

第五章.循环

1.while循环(while后无符号)

(1)工作原理

在这里插入图片描述

(2)while循环两大规则

在这里插入图片描述
在这里插入图片描述

(3)示例

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.do-while循环(while后有“;”)

(1)工作原理

在这里插入图片描述

(2)示例

在这里插入图片描述

(3)比较while和do-while循环的工作原理

在这里插入图片描述
在这里插入图片描述

3.for循环(循环中两个分号不能丢)

在这里插入图片描述
在这里插入图片描述

for循环表达式

在这里插入图片描述

乘法表示例

在这里插入图片描述

continue语句(笔试题中经常出现)

在这里插入图片描述

第六章.数组

(1)一维数组

数组:定义多个相同类型的变量
int a[100];
a 数组名
int 数组元素类型
100 变量个数
数组类型:数组元素类型和数组元素个数
int a[100]、int b[99]、char c[100]均为不同类型数组。
int a[5] 等同于 int a,b,c,d,e;
int a[5] 地址相连 int a,b,c,d,e地址不相连

数组元素表示方法:

1.下标法:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.地址法 取址符& 取值符*

数组名 == 数组首元素地址
数组地址== &数组名
数组首元素地址== *数组地址
a = &a[0] a=&a[0]=a[0]
a+1=&a[1]
a+2=&a[2]
在这里插入图片描述

数组地址+1 是下一个数组地址
数组首元素地址+1 是下一个元素地址
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(2)二维数组

int a[4][2];
4 由4个相同的一维数组组成的
数组名 == 数组首元素地址
数组地址== &数组名
数组首元素地址== *数组地址
*a=&a[0][0]
**a=a[0][0]
在这里插入图片描述
a[0][0] a[0][1]
a[1][0] a[1][1]
a[2][0] a[2][1]
a[3][0] a[3][1]
在这里插入图片描述

第七章.指针

指针:保存地址的变量
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

常用数据类型对应字节数
  可用如sizeofchar),sizeof(char*)等得出
 32位编译器:
      char1个字节
      char*(即指针变量): 4个字节(32位的寻址空间是2^32,32个bit,也就是4个字节。同理64位编译器)
      short int : 2个字节
      int4个字节
      unsigned int : 4个字节
      float:  4个字节
      double:   8个字节
      long:   4个字节
      long long:  8个字节
      unsigned long:  4个字节
  64位编译器:
      char1个字节
      char*(即指针变量): 8个字节
      short int : 2个字节
      int4个字节
      unsigned int : 4个字节
      float:  4个字节
      double:   8个字节
      long:   8个字节
      long long:  8个字节
      unsigned long:  8个字节

指针法和下标法
在这里插入图片描述
在这里插入图片描述

第八章.字符串

1.字符串常量

字符串:只有字符串类型的常量,没有字符串类型的变量
char c[10]=”123”
char c[10]={‘1’,‘2’,‘3’,‘\0’} \0隐形
字符串格式符 %s
Scanf(“%s”,数组首地址) 不能加空格

3.字符数组和字符串

1.字符串常量
字符串常量是双引号括起的任意字符序列
字符串常量中可以包括转义序列 \”
字符串常量中可以包括字符串结束符
在这里插入图片描述

4.字符串处理函数(面试题源代码)
在这里插入图片描述

1.字符串长度函数
在这里插入图片描述
strlen(首地址) 返回值为字符串的长度。
在这里插入图片描述

2.不受限的字符串函数

(1)复制字符 strcpy(字符组1,字符串)

Strcpy(首地址,首地址)
在这里插入图片描述
在这里插入图片描述

(2)字符串链接 strcat

在这里插入图片描述
在这里插入图片描述

(3)字符串比较大小

在这里插入图片描述
在这里插入图片描述

3.受限的字符串函数

strncat(首地址,首地址,前几个字符)
在这里插入图片描述

第九章.函数

1.内置函数 string.h

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.自定义函数

1.函数三要素:返回值、函数名、参数

返回值可以给函数调用位置提供一个信息的反馈。
函数名是区分两个函数的唯一标准。

(1)函数的实现

数据类型 函数名(参数1, 参数2, …)
{
//函数体
}

Datatype functionName(argument1, argument2, …)
{
//code
}

(2)函数的调用

函数名(参数1,参数2);

(3)函数的声明

数据类型 函数名(参数1,参数2,……);

1.2形参与实参

形参和实参仅仅是数值上相等,是两个独立的变量。
通过传递地址,不一定可以间接修改变量的值。
函数声明与函数实现的参数列表,叫做形参
函数调用中的参数,叫做实参
在调用时,首先会将实参赋值给形参

1.3传值传址

==传值: 不希望函数内部对参数进行改变
传址: 希望在函数内部对参数进行改变

3.函数中传递数组 使用传递地址的方式实现

4.函数-吕鑫老师

一)认识函数:

a)让代码更加容易维护,就如同文章中有各个不同段落。
b)让代码重用性高 ,可以对同一个函数多次调用,不用多次写该代码。
c)如果把main函数比作公司的经理,那么其他函数经理下面的员工。
d)不能让main函数做几千几万行代码,要建立不同的函数分工处理任务。

二)函数的定义:

定义包括:函数头和函数体
函数头:函数大括号上的第一行
函数体:函数大括号内的多行代码内容。
函数头包括:返回值类型 函数名(参数列表)

三)参数原理:

a)参数就是下属的小本子,记录经理传递来的数字,根据这些数据进行计算;
b)每次进入被调函数,都会重新分配内存空间给形式参数和临时变量;

四)返回值原理:

a)当返回值的类型不大于4个字节,通过EAX作为暂存空间;
b)被调函数return的数据放在EAX寄存器中,
c)回到主调函数中之后,主调函数从EAX寄存器中取出被调函数的返回值;
d)当返回值的类型大于4个字节,32位寄存器存储不下,
可能是放在主调函数中的一个内存空间;

五)函数的声明:

一般情况下,当被调函数在主调函数代码的上方才能够被调用,否则编译时就不能通过,这叫做“代码的可见性”。
a)使用函数声明,就可以让不可见的函数被主调函数调用。
b)函数声明,就是将被调函数的函数头放在被主调函数的上方,加个分号即可。
c)在一个代码量很大的C语言源文件中,通常在这个源文件的头部把所有函数都声明一遍。就如同一本书的开头首先是目录,以便于方便的浏览这本书籍的每个章节。
d)函数声明如果与函数定义在名称或者参数类型稍有不同,就出现连接错误。
e)函数声明只是一种样式,参数类型只要与函数定义一致即可,可以去掉声明中的变量名;
f)有了函数声明之后,函数的定义可以转移到其他原文件中去,也就是跨文件访问函数;

内存分区:栈、堆、全局区、字符串常量区 (代码区)

Stack :栈

第十章.结构体的字节对齐

结构体的字节对齐
为提高结构体的读取效率,通常默认4字节对齐

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值