整型指针
整型指针,用来存放整型的地址,将整型a的地址用取地址符(&)取出来,存放在指针p中
int a = 10;
int* p = &a;
int* 类型的指针访问4个字节,若p+1,则跳过4个字节
浮点型指针
浮点型指针,用来存放浮点型的地址,将浮点型a的地址取(&)出来,存放在指针p中
float a = 10.5;
float* p = &a;
float* 类型的指针访问4个字节,若p+1,则跳过4个字节
字符型指针
字符型指针,用来存放字符型的地址,将字符型a的地址取(&)出来,存放在指针p中
char a = 'b';
char* p = &a;
char* 类型的指针访问1个字节,若p+1,则跳过1个字节
数组指针
以整型数组指针为例
int arr[3] = { 1, 2, 3 };
int (*p)[3] = &arr;
此时p的类型为 int (*)[3]
int arr[] = { 1, 2, 3 };
int (*p)[3] = &arr;
补充:
arr为数组首元素的地址,两种情况下除外
1. arr单独放在sizeof内部时,sizeof(arr),求的是整个数组的大小
2.&arr,此时取出的是整个数组的地址
所以,&arr,需要用数组指针存放;若为arr,则用整型指针存放即可
float和char的数组指针与int类似,将int改为相应的类型即可
float arr1[] = { 2.5, 3.3, 6.0 };
float (*pf)[3] = &arr1;
char arr2[] = { 'a', 'b', 'c' };
char (*pc)[3] = &arr2;
指针类型为 float (*)[3] , char (*)[3]
函数指针
依然以整型为例
定义一个函数,f返回值类型为int,两个形参类型为int
int fun(int a, int b)
{
.....
}
函数指针写法为下面的(1)(2)
int fun(int a, int b)
{
...
}
int (*p)(int a, int b) = fun;//(1)
int (*p)(int a, int b) = &fun;//(2)
对函数而言,函数名就是函数的地址,当然,如果加上&也是一样的,都能取出函数fun的地址
指针类型为 int (*)(int a, int b)
如果函数没有返回值,没有参数,则类型为 void (*)()
总之,函数指针为 函数返回类型 (*指针名)(函数参数)
这次分享就到这里,感谢阅读!