指针数组
int *arr[2];
int a = 8;
arr[0] = &a;
数组指针
// 一维数组指针:
int arr1[2] = {0};
int *p = &arr1[0]; // ~ *p = arr1;
// 二维数组指针:
int arr2[3][4] = {
1,2,3,4,
5,6,7,8,
9,10,11,12
};
int (*pp)[4] = arr2;
// (*pp+i)= &arr2[i] (*(*pp+i)+j) =arr2[i][j]
// pp=&arr2; *pp = &arr2[0]; **pp = arr2[0][0] = 1;
常量指针
//是一个指针,这个指针指向一个常量,指针指向的变量的值不可通过指针修改。
int age = 20;
int const *p = &age; // 与 const int *p = &age; 等价
// 此时如果写 *p = 89 ; 报错不可修改
int b = 8;
p = &b; //是可以的
//这样,就可以防止别人通过指针修改age里面的内容。
指针常量
//是一个常量,不可以改变指向。
int a = 2;
int * const p = &a; // 常量在定义的时候初始化!!!
int c = 3;
//此时 p = &c; 是错误的!!! p是一个常量,不可修改p的指向!!!
*p = 9; //是可以的
二级指针
int a = 10;
int *p = &a;
int **pp = &p;
printf("%d\n",*p); //10
printf("%d\n",**pp); //10
/*更多级的指针同理,不常用*/
指针函数:是一个函数,函数的返回值是指针。
函数的返回值,不能指向一个已被释放的内存。
函数指针:是一个指针,指向一个函数。函数名即函数首地址。
int (*aaa) (int a,int b) = NULL;//函数指针,可以指向返回值为int,有两个int参数的所有函数