没有合适的资源?快使用搜索试试~ 我知道了~
C语言一图流总结PDF
5 下载量 43 浏览量
2023-07-20
19:40:37
上传
评论
收藏 387KB PDF 举报
温馨提示
试读
1页
C语言是一种通用的、面向过程的编程语言,广泛用于系统编程、嵌入式开发和应用程序开发等领域。下面从数据类型、运算符、控制流、数组、指针、函数、字符串以及内存与作用域等几个方面进行总结: 数据类型: C语言提供了基本的数据类型,包括整型(int、char、short、long)、浮点型(float、double)、字符型(char)、布尔型(_Bool)等。 用户还可以通过typedef关键字自定义新的数据类型,方便代码维护和阅读。 运算符: C语言支持算术运算符(+、-、*、/、%)、关系运算符(>、<、==、!=、>=、<=)、逻辑运算符(&&、||、!)等。 还有位运算符、赋值运算符、条件运算符(三目运算符)等。 控制流: 控制流用于控制程序的执行顺序,包括顺序结构、分支结构(if-else、switch)、循环结构(while、do-while、for)等。 通过控制流语句,程序可以根据不同的条件执行不同的代码块,实现灵活的程序逻辑。 数组: 数组是一组相同类型的元素的集合,通过下标可以访问数组中的每个元素。 C语言中的数组可以是一维的、多维的,也可以是字符数组(字符串)
资源推荐
资源详情
资源评论
C语言总结
数据类型
基本类型
short,int,long,unsigned 描述各种长度的整数
char 描述一个字符
float,double, long double 描述浮点数
bool 逻辑状态
void 空类型
派生类型
数组 在一块连续的内存中存储相同类型的元素
结构体struct 在一块连续的内存中存储不同类型的元素
联合体union 表示互斥,公用一块内存
枚举enum 整数的常量列表
数据类型的特点
字节长度
有符号或者无符号
存储什么类型的数据
运算符
算数运算符 +,-,*,/,%
关系运算符
>,<, >=, <=
==, !=
if(0 == 0)
if(-ESPSION<0 && 0<ESPSION)
if(ture)
if(p == NULL)
逻辑运算符
&& 第一个条件为假,后续条件不执行
|| 第一个条件为真,后续条件不执行
! !!100 --->1
位运算符
~
1&?=?,0&?=0
1|?=1,0|?=?
1^?=~?,0^?=?
<< 左移n位,在右边添n个0
>> 右移n位,在左边添n个0
复合运算符 +=,-=,*=,/=,%=,&=,|=,^=
赋值运算符 =
左值=右值
左值:代表一块内存
右值:表达式,一定是一个确定的常量
逗号运算符
优先级最低
表达式中最后一个值是整个表达式的值
三目运算符
只有一个
判断语句?真:假
取址
取一个变量的内存基地址
解引用 解释指针变量所存储的那个地址的内存
成员引用符 .和-> 用于结构类型成员访问
自增自减
后缀 先使用变量的值,再给变量自增1
前缀 先给变量自增1,再使用变量
注意:运算符的优先级,优先级一致就注意结合方向
控制流
分支
if-else
二路
多路
单个判断
switch-case,break
根据不同的值选取对应的代码块
case 1 ... 100: //1到100之间都符合条件
default 其他值不满足
循环
for 初值,条件判断,迭代
while 条件满足,就继续循环
do-while 先执行一次代码块,再根据条件决定
continue
迭代,下一次条件判断
只能出现在循环中
break 跳出循环
goto 适用于条件嵌套很深的循环出错处理
数组
定义 申请一块内存存储相同类型的数据
数组名 首元素地址
数组下标 0 ~ n-1
赋初值
int a[3]={1, 2, 3} //顺序赋值
int a[3] = {1} //顺序赋值,后续不足赋值0
int a[100] = {[10 ... 20]=88}; //指定范围赋值
int a[] = {1, 2, 3, 4} // 由初始化列表决定元素个数
数组元素的类型
基本类型 int a[4];
数组类型 int a[2][3]
结构类型
struct node a[3]
union node a[3]
指针类型
int *a[3] 整形指针数组
int (*a[3])() 函数指针数组
数组作为函数参数 数组名会退化成指针
一维数组元素的访问 a[i], *(a+i), *(i+a), i[a]
数组基地址[下标] *(数组基地址+下标偏移)
数组基地址[下标1][下标2] *( *(数组基地址+下标1) + 下标2 )
注意 a[-2] ---》 *(a-2)
指针
定义 指向某一块内存的基地址
赋初值
int *p; // 野指针
int *p = NULL; // 初始化空指针
int a = 10;
int *pa = &a;
指针的类型
基本类型 int *p = NULL;
数组类型 int (*p)[3]
结构类型
struct node *p = NULL
union node *p
指针类型 int *(*p)
空类型 void *p;
不能解引用
void 不可以定义普通变量
const 类型 int *const p
函数类型 int (*p)(int)
指针范围
32位 0x0~0xffffffff
64位 0x0~0xffffffffffffffff
指针运算
加 向后偏移n个数据类型大小的字节
减 向前偏移n个数据类型大小的字节
自增
*p++ 先取出当前地址的值,再向后偏移一个数据类型大小
*++p 先向后偏移一个数据类型大小,再取出当前地址的值
自减
*p-- 先取出当前地址的值,再向前偏移一个数据类型大小
*--p 先向前偏移一个数据类型大小,再取出当前地址的值
函数
定义 一个独立的功能模块
返回值类型 函数名(形参列表)
{
函数体;
}
函数的类型
普通函数
void f(int a)
int f(void)
递归函数
在函数内部调用自己,最后有一个结束返回调用的条
件
内联函数
inline int f(void)
在编译时会嵌入到调用的代码块里面
一般都比较短小
回调函数 函数是你写的,但是不是你调用的
变参函数
int f(int a, ...)
一定要有一个固定的形参
形参入栈的顺序:从右往左
静态函数
被限制在本文件使用
static int f(void)
函数返回值
类型
基本类型
结构体类型
返回指针
不可以返回栈内的变量地址
如果由返回值类型,但是没有写return,返回值是未
知的
函数的调用
函数名(实参跟形参一一对应)
(void)函数名(实参) 表示调用函数,丢弃返回值了
函数名 表示函数的地址 &f 等价于 f
字符串
“hello”, 就是匿名数组
存储在数据段的.rodata, 用双引号引起来,总是
以