数组:
一维数组:
1.定义:
存储类型 数据类型 数组名[元素个数];
存储类型:
(默认) auto:局部变量、自动型变量
register:寄存器变量
extern:声明一个外部变量
static:静态变量
数据类型:
基本数据类型
1.整数类型
2.浮点数类型
3.缺省类型
4.泊尔类型(逻辑类型)
构造数据类型
1.结构体
2.共用体
3.枚举
数组名:
1.可以由字母、数字、下划线构成,不能
以数字开头
2.不能与C语言关键字重名
3.最好不要与C语言库函数重名
元素个数:
必须为常量
2.数组的初始化:
1.全部初始化
int a[5] = {1, 2, 3, 4, 5};
2.局部初始化
int a[5] = {1, 2, 3};
3.默认初始化
int a[] = {1, 2, 3, 4, 5};
sizeof(a) / sizeof(a[0])
3.数组存储
数组空间必须连续
4.数组容易出错的地方:
1.数组定义元素个数必须为常量
2.数组元素不要溢出
3.数组不能整体操作
一维数组用单层for循环操作
二维数组用双层for循环操作
5.字符型数组:
存储字符串必须用字符数组
6.字符串操作函数:
strlen:获得字符串长度
size_t strlen(const char *s);
常用作统计字符长度
strcpy:字符串拷贝
char *strcpy(char *dest, const char *src);
常用作对字符串赋值操作
strcat:字符串拼接
char *strcat(char *dest, const char *src);
strcmp:字符串比较
int strcmp(const char *s1, const char *s2);
strncpy:拷贝源开始的n个字符到目的空间中
char *strncpy(char *dest, const char *src, size_t n);
strncat
strncmp
memcpy:内存空间拷贝
memcmp:内存比较
strstr:在一个字符串中查找另一个子字符串出现位置
strtok:字符串分割函数
printf:格式转化
int n = 100;
sprintf
sscanf
重点:
1.一维数组的排序
2.字符串常用操作
二维数组:
整形二维数组
二维字符型数组
可以存放字符串数组
"hello"
"world"
"how"
"are"
"you"
指针:
1.指针基本含义
地址:用来区分内存中不同字节的编号
指针:指针具有指向的概念,地址就是指针,指针就是地址
指针变量:存放地址的变量
指针算术运算:
&:取变量在内存空间中存放位置的首地址
*:左值:对指针指向空间赋值
右值:取指针对应空间中的值
int *p; 0x2000
char *p; 0x2000
double *p; 0x2000
指针数组:
int *a[5];
定义一个数组,数组名为a,数组有5个元素,占
20个字节空间,每一个元素都是指向一个int
类型的指针
数组指针:
int (*p)[5];
定义一个指针变量p,指针占4个字节空间,指针
指向20个字节空间
指针函数:
char *strcpy(char *dst, char *src);
返回值为指针的函数
函数指针:
char *(*p)(char *dst, char *src);
定义一个指针变量p,占4个字节存储空间,指针具有指向的概念
是指向返回值为char *并且有两个char *型
参数的函数指针
2.指针数组和数组指针
存储使用数组,操作使用指针
指针和一维数组关系:
int a[5] = {1, 2, 3, 4, 5};
数组的数组名a,是指向数组第一个元素首地址的
指针
a == &a[0]
a:可以理解为int *型,除以下两种情况
1.sizeof(int *) :4
sizeof(a) :20
2.&int * int **
&a int (*)[5]
指针和二维数组关系:
int a[2][3] = {1, 2, 3, 4, 5, 6};
二维数组的数组名是指向数组第一行所有
元素的一个数组指针
二维数组元素的访问方式:
int a[2][3] = {1, 2, 3, 4, 5, 6};
int *p = &a[0][0];
int *p = a[0];
int *p = *a;
int (*q)[3] = a;
访问第m行第n列
a[m][n]
*(a[m]+n)
*(*(a+m)+n)
*(p+m*N+n)
*(*(q+m)+n)
*(q[m]+n)
q[m][n]
数组本质:
结构体:
1.struct 结构体名称
{
数据类型1 成员变量1;
数据类型2 成员变量2;
数据类型3 成员变量3;
…
};
2.成员变量的访问:
struct student
{
char name[32];
char sex;
int age;
int score;
};
结构体变量访问成员变量:
struct student s;
s.name char *
s.sex char
s.age int
s.score int
(&s)->name char *
(&s)->sex char
(&s)->age int
(&s)->score int
结构体指针访问成员变量:
struct student *p = &s;
p->name char *
p->sex char
p->age int
p->score int
(*p).name char *
(*p).sex char
(*p).age int
(*p).score int
3.结构体存储
内存对齐
struct s
{
char a;
short b;
int c;
};
1.结构体成员变量只能存放在内存地址为自身基本
类型长度整数倍的内存单元中
2.结构体成员变量的大小必须是自身最大类型长度
的整数倍
4.结构体传参
共用体
所有成员变量共享同一个空间
可以用来测试内存大小端
小端:内存低地址存放低数据位
大端:内存低地址存放高数据位
枚举
enum status
{
free, 0
play, 1
pause, 2
};
enum status s1;
====================================================
软件编程:
IO
进程/线程
网络编程
IO
标准IO
文件IO
文件类型
b:块设备文件 文件IO
c:字符设备文件 文件IO
d:目录文件 目录IO
-:普通文件 文件IO/标准IO
l:链接文件 链接IO
s:套接字文件 文件IO
p:管道文件 文件IO
标准IO
1.打开文件 fopen
2.读写文件 fgetc/fputc ASCII码文件
fgets/fputs
fscanf/fprintf
fread/fwrite 二进制文件
3.关闭文件 fclose
普通文件:
1.ASCII码文件(特殊二进制文件)
文本文件
2.二进制文件
图片、压缩文件、音视频文件
2019
'2''0''1''9'
11111100011
文件拷贝
fread/fwrite
返回值为对象数
read/write
返回值为读到的字节数