一、二维数组的定义和存储
一、二维数组的定义

1、二维数组的应用:图、方阵
2、数组元素的存放顺序:内存是一维的,二维数组:按行优先


a[1]:表示第一行,也表示a[1][]的所有元素


二、二维数组的初始化、遍历
1、元素的初始化

1、不是按顺序存放,部分初始化

2、按顺序存放

3、二维数组只能省略行,不能省略列

1、打印杨辉三角形

2、打印数组中的最大值,行,列

三、多维数组

二、字符数组和字符串
一、一维字符数组和字符串
1、字符数组的用法

1)“abc”='a''b''c''\0'
2)逐个字符赋值


3)0=\0=NULL
2、字符串的用法
4)以字符串的形式赋值

5)用%s打印数组中存放的字符串

这种情况只适合打印以\0结尾的字符串,单个字符赋值有可能出现错误


二、二维字符数组和字符串

1、在赋值的时候,列赋值比要用的大一些,所有的输入都可以用字符串来表示(留出\0的位置,简化输入)
字符串存储-------二维数组!!!
2、打印
1)打印字符串

2)用最原始的数组的形式

3、逆序输出字符串
1)字符串不变,逆序输出



2)字符串倒叙



4)gets和scanf的区别
gets可以取空格,scanf不可以
三、字符串处理函数(一)
man+函数名:查看函数手册

一、strlen函数(只数有效字符,不含\0)






二、strcpy函数--字符串拷贝函数


拷贝源码:

三、strcat函数---字符串连接函数


拷贝加连接

四、strcmp-----字符串比较函数

从左到右逐个字符,直到不同字符。

如果完全相同,字符串较短的比较小。

四、字符串处理函数(二)


man isalpha:

一、strncpy---复制指定长度的字符串

二、strncat---附加指定长度字符串

三、strncmp---只比较前几个字母

四、strncasecmp---忽略大小写比较字符串的大小

五、strchr---在字符串中查找指定字符,返回第一次出现的地址
strrchr---在字符串中查找指定字符,返回最后一次出现的地址


六、strstr---查找字符串

printf("%d",strstr(s1,s2)-s1);
//显示查找的字符串首字符的位次
在命令行界面也可以查找字符串

七、



八、toupper---小写转大写
tolower---大写转小写

五、指针的基本用法
一、地址和变量
1、bit:一位二进制
byte:一个字节=8bit

2、什么是指针?
内存的地址是指针
什么是指针变量?
存放地址的变量称为指针变量
3、指针变量的声明

4、变量的初始化

5、一个8位的16进制数是多少字节?
一位16进制对应的是4位二进制数,8个16进制对应4个8bit,所以对应4字节。
6、指针的目标:指针指向的内存区域中的数据成为指针的目标。
如果指针指向一个变量的内存空间,这个变量称为指针的目标变量。简称为指针的目标。
7、取目标地址的内容*px=*(&x)=x
8、

9、指针赋值
1)把变量地址赋值给指针

2)指针变量之间互相赋值


3)把数组地址赋给指针变量

10、

sizeof(p):存储指针变量p所占的内存
11、指针占几个字节

六、指针的运算
1、指针运算实际上就是地址运算,只能进行赋值运算、算数运算和关系运算




2、地址加一,表示的是这个数据类型的地址变量的地址加1,因此不同数据类型的地址变量相加减是没有意义的。
3、相同类型的指针相减:px-py表示的也是中间间隔的数据个数。


扭曲的式子:初学时指针类型和目标变量的数据类型严格保持一致。

二、指针的关系运算

1、指针的关系运算表示他们指向地址之间的关系
2、指针与整数变量之间的关系运算没有意义。
3、指针与0进行关系运算,判断指针是否为空。


七、指针与数组
1、指针与一维数组

2、x[i],*(p+i),*(x+i),p[i]表示的值相同
x+i:数组名+i
但是x++是错误的


例子:用指针完成数组倒置


3、区别x[1]和p[1]

八、指针与二维数组
一、一级指针便利二维数组

二维数组:
*(p+1):移动一个数据
*(a+1):移动一行
二、指针与二维数组

1、二维数组名常被用做行地址



三、行指针
1、行指针又称数组指针,存储行地址的指针
2、行指针的声明

可以理解为指针的步长是一行

int (*p)[列]
则
p=a
p[1][1]=a[1][1]

九、字符指针与字符串
一、字符指针与字符串上
1、字符指针是把字符串的首地址赋给指针
2、赋值方式
1)先定义字符串,指针指向字符串数组的首地址





2)用指针直接去定义字符串
此时字符串相当于一个全局变量,不能再用指针修改字符串的值
3)实现字符串链接函数

十、指针数组
一、指针数组的概念和用法
1、指针数组


2、指针数组的初始化

二、用一维指针数组访问二维数组



三、指针数组的应用-处理二维数组

二级指针

十一、多级指针、void指针以及const
多级指针、void指针以及const
1、



三、多级指针和指针数组
1、示例



2、多级指针
二级指针可以管理一级指针数组

四、void指针的使用
1、void指针的初始化
void *p;
2、void指针不确定数据类型,可以通过强制类型转换让变量指向任何数据类型的变量,在强制转换之前,不能进行任何指针的算数运算


赋值时可以不转换,但使用时(打印)必须转换


3、用void指针遍历一维数组


五、const变量、const指针
1、const变量,常量化变量,变量的值不能被修改了

1)const int *p

2)int const *p


3)const int *const *p
只能const int *const p=&a;

六、main函数是否可以带参数(涉及到const指针)


注意事项
常用命令
1、man isalpha

2、EOF
1)end of file,即文件结束符,EOF的值是-1。在文本文件中才能使用EOF作为结束符。
2)在使用scanf输入时,如果输入的数据正确,则scanf返回一个正整数,如果输入的是<ctrl+Z>组合键,则表示返回EOF,即-1。
3、Null相当于一个宏定义
#define NULL 0
4、C语言中,只有全局变量、static是放在静态区的,只有在程序结束的时候才释放内存,指针放在栈当中
5、






















