-
const与指针:
const char *p;
const修饰 *p
*p 只读 //*p = ‘X’;错误的
p的值可以修改 p可以指向其它内存
p = “HELLO”;char const *p; const修饰 *p *p只读 p可以改变 char * const p; const修饰p p只读 *p 可以改变 const char * const p; const修饰 p 和 *p p和*p都是只读 不能修改2.指针加减运算
指针加1 加了一个单位(数据类型大小)的地址大小数组指针
本质是一个指针 这个指针指向一个数组
int arr[10] = {};
int (pArr)[10] = &arr;
指针数组
本质是一个数组 数组中存储的元素是指针
int arr[10] = {}; //指针数组一维数组名 是数组首元素的地址
int arr[10] = {};
int p = arr;// &arr[0] ===> &((arr+0)) ==> &*arr == arr
二维数组名 是一给数据的地址
int brr[3][4] = {};
int (pb)[4] = brr; //&brr[0][0] 第一个元素的首地址
&brr[0][0] ==> &((brr[0]+0)) ==> &brr[0] = brr[0]
&brr[0][0] == brr[0] //第一个元素的地址
&brr[0] ==> &((brr+0)) ==> &*brr == brr
&brr[0] == brr; //第一个一维数组的地址
&brr //整个二维数组的地址int arr[N][M]; int (*pnm)[N][M] = &arr; int (*pm)[M] = arr; int *p = arr[0]; p = &arr[0][0]; brr[2][3] == *(*(brr+2)+3) *(brr+2)[3] ==> brr[2][3]函数指针
本质是指针 指针指向一个函数
函数名本身代表该函数所在内存的地址函数返回值类型 (*函数指针变量)(函数形参列表);
函数指针变量 = 函数名;指针函数
本质是一个函数 该函数返回一个指针
int * myfunc(int a,int b){
}指针常量
常量 这个指针是一个常量
int * const p;
常量指针
指针 指针指向一个常量
const int *p;
函数指针数组:
本质是数组 数组里的元素是 函数指针认识变量 void (*fpArr[10])();
首先从标识符开始,从标识符往右看,如果[]说明是数组 如果()是函数
如果遇到) 就要往右看 * 指针 剩下是一个函数
函数指针数组
fpArr [] 数组
* X 指针
void X() 函数
函数指针数组int (*gf)(int,int); //定义一个函数指针类型的变量gf gf是变量 typedef (*FT)(int,int);// 定义一个函数指针类型FT FT是类型 typdef void (*sighandler_t)(int);//定义类型 类型名为 sighandler_t sighandler_t signal(int signum,sighandler_t handler);
C语言-第十二章高级指针
最新推荐文章于 2025-07-28 20:44:22 发布

2万+

被折叠的 条评论
为什么被折叠?



