#技术笔记
1.传入参数:只负责把信息带入,不负责把信息带出。
传入传出参数:类似指针,可以把信息带入,可以把信息带出。
2.数组名可以看做是一个指向数组连续空间的首地址;数组名使用起来像是普通指针,但是不能修改指向。有些情况下数组名不能被当成首指针对待,例如使用sizeof()数组名的时候。
3.当一个数组作为参数传给一个函数时,数组名隐式转换(也称退化)为指向其首元素的指针。
4.后缀法区分数组指针和指针数组。
数组指针,是指针(后缀),指向数组的指针,偏移量是整个数组大小的空间。例如:int (*p)[1];//就是数组指针,代码区分的话,我是看先和[]结合还是先和*结合,这个有小括号先和*结合,说明自己是个指针, 指针指向数组,所以是数组指针。
指针数组,是数组,数组中装的是指针(类型为自己所定义好的)。例如:int *p[1]; //这就是指针数组,同理代码层面的理解,先和[]结合,在和*结合([]结合性 > *的结合性),就是先是数组,称为指针数组.
5.指针常量与常量指针
指针常量:代码形式有2种const int *p; int const *p; 就从右向左读(指针常量),作用就是const修饰了*p,*p所指的内容就不能更改了,但可以改变指针的指向。
常量指针:代码形式 int * const p; 整体const修饰p,也就是指针不能修改指向了,但可以修改指针所指的内容,如同其名常量指针。
还有一种const int* const p; 作用2个都不能更改了,指针的指向和所指向的指。
6.二维数组的指针理解。
void test()
{
int matrix[5][6] =
{
{1,2,3,4,5,6},
{7,8,9,10,11,12},
{13,14,15,16,17,18},
{19,20,21,22,23,24},
{25,26,27,28,29,30}
};
// 二维数组里面的一个元素是,一维数组。
// 二维数组名是: 数组指针。 int[5]
// 数组名代表什么。 关键!
// matrix[2][3] ==== *(*(matrix + 2) + 3)
// 数组名 -> matrix: 类型:数组指针。 值: 指向1 (不论是啥都是指向1的地址值0
// matrix + 2: 类型: 数组指针。 值: 指向 13
// *(matrix + 2): 类型: 数组。 (普通指针) 值: 指向13
// *(matrix + 2) + 3 类型: 指针。 值: 指向16
// *(*(matrix + 2) + 3): 类型: int 值 16
}
转载自CSDN-专业IT技术社区



