基于唐老师 "C语言专题" 总结
数组类型
数组类型由
元素类型和
数组大小共同决定
例如:int array[5]的类型为int[5]
C中通过typedef为数组类型重命名
typedef type(name)[size];
数组类型声明:
typedef int(AINT5)[5];
typedef float(AFLOAT10)[10];
数组定义:
AINT5 iArray;
AFLOAT10 fArray;
数组指针
数组指针本质上是一个指针
数组指针指向的值是数组的地址
可通过数组类型定义数组指针:
ArrayType * pointer;
也可以直接定义:type (*pointer)[n];
指针数组
指针数组本质上是一个数组
指针数组中每个元素的类型是指针
指针数组定义:
type *pArray[n];
main函数
main函数可以理解为操作系统调用的函数
在执行程序的时候可以向main函数传递参数
二级指针
指针变量在内存中会占用一定的空间
可以定义指针来保存指针变量的地址值
为何需要指向指针的指针
指针在本质上也是变量
对于指针也同样存在传值调用与传址调用
二维数组
二维数组在内存中以一维的方式排布
二维数组中的第一维是一维数组
二维数组中的第二维才是具体的值
二维数组的数组名可看做常量指针
< 一维方式遍历二维数组 >
数组名
一维数组名代表数组首元素的地址
二维数组名同样代表数组首元素的地址
二维数组名可以看做是指向数组的常量指针
二维数组可以看做是一维数组
二维数组中的每个元素都是同类型的一维数组
C中只有一维数组,而且数组大小必须在编译期间就作为常数确定
C中数组元素可以是任何类型的数据,即数组的元素可以是另一个数组
C中只有数组的大小和数组首元素地址是编译器直接确定的
C中数组参数退化为指针意义
C中只会以值拷贝的方式传递参数
当向函数传递数组时
将数组名看做常量指针传递数组首元素地址
二维数组参数
二维数组参数同样存在退化问题
二维数组可以看做是一维数组
二维数组中的每个元素是一维数组
二维数组参数中第一维参数可以省略
<等价关系>
TIPS
C中无法向一个函数传递任意的多维数组
为了保证正确的指针运算,必须提供除第一维之外的所有维长度
限制
一维数组参数 - 必须提供一个标示数组结束位置的长度信息
二维数组参数 - 不能直接传递给函数
右左法则
指针阅读技巧解析
1.从最里层的圆括号中未定义的标识符看起.
2.首先往右看,再往左看.
3.当遇到圆括号或者方括号时可以去确定部分类型,并调转方向.
4.重复2,3步骤,直到阅读结束.