C语言三座大山:数组、指针、函数。
单个概念并不复杂,但是概念互相套在一起就容易迷糊。基于此,整理如下:
1 数组:一批内存位置相邻的变量。
指针与数组:
因为指针可以用来做运算,所以通常可以用指针来指向数组。
int a[3] = {1,2,3};
int *p = a;
如上:p是变量, a是数组常量, 数组名本身就是个指针,但a是常量。
2 指针数组与数组指针:
指针数组:见名知意,是一个数组,其每个元素是指针。
例:int *p[4] 其中p是个长度为4的数组,每个元素类型是整型指针。
数组指针:本质是个指针,指向一个数组。
例:int (*p)[4] 其中变量p是一个指针,指向长度为4的元素为整型变量的数组。
3 指针函数与函数指针
指针函数:本质是个函数,返回值是个指针类型
int * func(int i, int j)
{
return &i;
}
函数指针:本质上是个指针,指针类型是函数
int max(int a, int b)
{
return a > b ? a : b;
}
int (*p)(int, int);
p = max;
4 指针常量与常量指针
指针常量:本质是个常量,常量类型是个指针 谁离变量近,变量类型就是谁
int a;
int *const p = &a;
p不可以变 *p可以变
常量指针:本质是个指针,指向内容是个常量
int a;
int const *p = &a;
(*p)不能变,指针指向的内容(p)可以变