C语言基础

一、数据类型及控制语句

1.C语言的注意点

  • 面向过程
  • 一个必有一个mian函数
  • 注释 // /* */

2.C语言框架

一个.c对应一个.h
mian.c中调用头文件
分文件分函数

3.定义数据关键字

float:单浮点型(带小数) 4字节 float b=3.8f;
double :双浮点,8字节 double b=3.8;
char:字符型 1个字节 有符号 0~255​,字符型的数据在​内存中存放的是ASC码
short:短整形 2字节 -32768~32767
int:整形 32位系统下占4字节 16位下占2字节 -20亿~20亿
struct:结构体类型
union:联合体
enm:枚举

4.正数和负数在内存中的存储形式

正数:原码
负数:最高位为符号位,1表示负数。补码
补码:负数的反码+1;

5.存储相关关键字

register:寄存器变量,不能修饰数组,不能修饰浮点数,不能取地址;
static:静态变量
const:常量,只读变量不能修改,可修饰指针
outo:
extern:(外部)用来声明函数和全局变量

6.其他关键字

sizeof (a):测量a在内存中占的字节数
typedef :重用名相关关键字
eg:typedef short ont INT16;
volatile:易改变,

7.C语言命名规则

有字母数组下划线构成,且不能以数字开头

8.格式化输出

%d:十进制有符号数
%x: 以十六进制表示整数
%s:字符串
%c:单个字符
%p:指针的值
%u:十进制无符号整数
%o:以八进制表示的整数
%f: float型
%lf:double型
另:%4d(占四个位置,右对齐);%04d(左边补3个0);%-4d(左对齐);%7.3f(占7个位置,小数点后三位)

9.类型转换

自动转换
字节少的往对的转换
强制转换
(类型说明符)(表达式)

10.位运算

&:按位与 ,任何值与0得0,与1不变
|: 按位或,或1的1,或0保持不变
~:按位取反
^:按位异或,不同为1,相同为0;
位移:
	>>:右移,
	逻辑右移:高位补0,低位溢出
	算术右移:a.有符号数,低位溢出高位补符号位;b.无符号位于逻辑右移同
	<<:左移,高位溢出,低位补0;

11.选择分支控制语句

if(){...}else(){...};
.......

12.循环语句

for循环
while循环
do{//循环体}while(条件表达式);
break:跳出循环;continue:结束本次循环进入下一次循环
goto: eg .goto a;.....a;

二.数组

1 概念及分类

  • 若干个 变量 有序存储的集合
  • 字符数组
  • 整形数组
  • 指针数

2.一维数组

3.二维数组

4.字符数组

*char c1[3]={'a','s','s'}; 占3个字节
char c2[3]="asd"; 占4个字节,字符串以\0结束*

三.内存的概念及分区

1.概念

物理内存:实实在在的存储 设备
虚拟内存:操作系统虚拟出来的内存
进程:正在运行的程序

2.分区

堆:动态申请内存时在堆里开辟内存
栈:主要存放局部变量
静态全局区:
未初始化的静态全局区
初始化的静态全局区

代码区:存放程序代码
文字常量区:存放常量

三.变量

1.普通全局变量

函数外部定义的变量
不赋初值为0
作用在程序所有地方
声明:entern int num;
程序结束自动释放

2.静态全局变量

用static修饰
只能在本定义的.c文字中使用

3.普通局部变量

函数内部定义,有效
函数结束时释放失效
不赋初值时随机数

4.静态局部变量

在函数内部定义,用static修饰
函数结束时不释放
以后再调用时不再为其开辟空间,也不赋初值

5.变量重名问题:局部变量和全局变量可以重名

6.内部函数:定义函数时前用static修饰

7.外部函数

四.函 数

1.概念:实现一个功能的代码封装
2.分类:
库函数:C库实现
自定义函数:自己实现的函数
系统调用
3.函数的定义
注:形参必须带类型
函数内部不能重复定义
4.函数的声明
对已定义的函数进行声明
关键字:extern
5.函数的调用
6.函数总结
定义一次多次调用
代码模块化

五、预处理、静态库、动态库

C语言编译过程
1.预处理:将.c的头文件展开、宏展开生成.i
2.编译:将预处理之后的.i文件生成.s汇编文件
3.汇编:生成.o目标文件
4.链接:将.o链接成目标文件

预处理
include<>/""
宏定义:#define PI 3.14
终止宏:#unde
带参宏:#define S(a,b) a*b

防止头文件重复定义
#ifndef _ AA_H_ \n #define_AAA_H_ \n …\n #endif
原理:选择性编译

静(动)态库
静态编译使用静态库(大)
动态编译使用动态库(小)

静态库的制作及使用
命令1:gcc -c mylib.c -o mylib.0
命令2:ar rc libtestlib.a mylib.o
注:静态库起名时必须以lib开头以.a结尾

静态库

六、指针

1.内存的概念
存储器:存储数据的器件
外存:外部存储器,掉电不丢失数据
内存:内部存储器,掉电丢失
物理内存
虚拟内存

2.指针的相关概念
指针就是地址(0x00000)
指针变量:用来存放一个地址的编号
对应类型的指针变量只能存放对应类型的变量的地址

3.指针的定义
数据类型 * 指针的变量名;
eg: int * p;
*用来修饰变量的,变量名为p
指针的运算符:&取地址、取值
32位系统下指针都占4个字节
注1:
+指针 取值,取几个字节由指针类型决定的
注2:指针++,指向下个对应类型的的数据
字符指针++,指向下个字符数据,指向存放的地址编号加1
整形指针++。指向下个整形数据,指针存放的地址编号加4

4.指针的分类
字符指针
整形指针
5.指针与数组
c语言规定:数组的名字就数组的首地址,是个常量,eg:p=a;
注:p和a不同,p是指针变量,a是常量
p=a与p=&a[0]是等价的
6.指针的运算
指针加减
两个相同类型的指针比较大小
两个相同类型的指针可以相互赋值
7.指针数组
指针和数组的关系
1.指针可以保存数组元素的地址
2.定义一个数组,有若干个相同类型的指针变量。,这个称为指针数组
定义方法:类型说明符 * 数组名[元素个数];
指针数组的分类
8.指针的指针
int **p;
9.数组指针
回顾:数组 的名字是数组的首地址,是第0个元素的地址,常量,数组名+1指向下一个元素
int (*p)[5] ;//定义一个数组指针变量p,p指向的是整形的有5个元素的数组。p+1 往下值5个整形,跳过一个有5个整形元素的数组。
注:数组名取地址变成数组指针,+1跳一个这样的数组的大小
10.函数指针
void (*curfun)(void);

七.字符串处理函数

strlen(const char *s); //测字符串长度函数
strcpy(char *dest,const char *src);//字符串复制
strncpy(char *dest,const char *src,size_t n);//注:不复制\0
strcat(char * dest,const char *src);//字符串追加
strncat(char *dest,const char *src,size_t n);//注:追加\0
strcmp(char *str1,char *str2);//字符串比较
strchr(char *s,char c);//字符查找,返回地址
strstr(char *s,char *s1); //字符串查找,
memset(char *s,char c ,int n);//n:字节个数

1.字符串数据转换
头文件:#include<stdlib.h>
atoi()
atol()
atof()
2.字符串切割:strtok(str,". : * “);
3.格式化输出:sprintf(buf,”%d:%d:%d",2019,8,2);
4.格式化输入:sscanf(“2019:8:2”,%d:%d:%d,&a,&b,&c);
5.const:修饰变量,指针,只读不可修改

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值