指针要素概念总结:
1.指针声明: int *p; p=&a或者int *p=&a;概念:只有在带有指针类型的定义语句中,*p是指针声明的意思,其他正常语句中,*p均代表解引用。
2.指针的类型,将声明时指针名字与名字前面的*去掉,剩下的即为指针类型
以下为一些指针的用法总结,如有不对,请大佬纠正。
void (*p)(void);//p是一个无参数的函数的指针变量
*p a(void);//a是一个无参数,返回值为*p的指针函数
void(*)(void);//表示void(void)类型的函数的指针
(void(*)(void))(x);//将地址x强转为void(void)类型的函数指针
(*((void(*)(void))(x)));//函数指针解引用,就是函数,跳转运行这个函数指针所指向的函数
typedef void (*p)(int b,int c);//定义了一个名为 p的函数指针类型,指向void(int b,int c)型函数
typedef void(int b,int c) *p;//与上条语句描述等价
void callback(int b,int c);//定义一个callback服务函数,参数为int b,int c
void installcallback(p d);//回调函数
void installcallback(callback); //使用回调服务函数作为形参
typedef struct
{
}A;
A *p;//定义一个结构体指针p
p->,(*p).//指针访问结构体A里的成员
int *p[]={&a,&b,&c}// p是一个指针数组,数组成员为指针
int a[]; int *p= a;//p是一个指向数组a的指针
void X(*p);//当数组指针p作为函数形参时,使用函数X时形参填*p对应的数组首地址,即数组名
void X(**p);//当指针数组*p作为函数形参时,使用函数X时形参是数组*p的首地址解引用之后再解引用
*p++;//等同于*p+1,先执行*p,然后p++,如果此语句赋值给一个变量则等于指针p对应地址的下一个地址上的数据
(*p)++;//先执行 (),再执行*p,再执行++,取指针p对应地址上的数据,然后+1并输出
(int *)(x);//假设x为一处地址,则此处为将此地址强制转为换int型的指针(指针即为地址,地址即为指针,指针变量存放的就是一串地址,故而可以将一串地址强制转换为指针,这样即可操作内存 。退一步讲,在申明的时候int*p =地址就注定了一串地址x完全可以在申明的时候强制转换为指针
//指针变量也占用内存,32位系统指针变量占用4字节内存,64位系统指针变量占用8字节内存