在初步了解了c的指针后我们再来看看更高级一点的指针用法(指针,函数,数组之间的相互套娃)
1.字符指针
字符指针即指向字符的指针
1)常量字符指针
通过一个指针指向字符常量
char* p = "hello world";
(注意此时并非将hello world的地址放入指针中而是将首元素地址放入)
2)变量字符指针
指针存储某个字符类型变量地址
char a = 'a';
char* p = &a;
2.函数指针
指向函数的指针
void test(int a)
{
;
}
int main()
{
void(*p)(int) = test;//定义个函数指针
return 0;
}
此时void为指向函数的返回类型
p为指针名
(int)为函数参数类型
又由于运算符*的运算优先级不高所以先用括号括起来声明指针
3高级套娃概念
在了解了基本的指针类型后,发现许多的高级概念无非就是指针函数数组三个元素互相套娃
例如:
1)函数指针数组
即存放函数指针的数组
void add(int a)
{
;
}
void sum (int a)
{
;
}
int main()
{
void(*p[2])(int) = {add,sum};
return 0;
}
2)指向函数指针数组的指针
void add(int a)
{
;
}
void sum (int a)
{
;
}
int main()
{
void(*p[2])(int) = {add,sum};
void(*(*pp)[2])(int) = &p;//定义一个指向函数指针数组的指针
return 0;
}
4.
回调函数
将某个函数地址传参之后在特定情况下通过第三方(如指针)调用
#include<stdio.h>
void print (int a)
{
printf("%d",a);
}
void test(void (*p)(int))
{
(*p)(5);
}
int main()
{
test(print);
return 0;
}