1.int *p可以承接一维数组和变量,取值时可以用下标法p[i]进行直接取值,或者用指针的偏移进行取值*(p+i),或者*p++,或者*p和p++的结合
2.int (*p)[i]用数组指针来承接二维数组,当p=a或者a+i时,是以行里面的有几个I元素来承接的,对应的是每一行的首地址,然后再通过指针的偏移来进行取值,例如:*(*(p+i)+j)或者*(p[i]+j)
3.int (*p)(),函数指针,也是像函数一样使用,p=函数名,()内是你要要传递的值,在使用时该指针时,因为函数是有返回值和没有返回值的,有返回值时要对应的在main里面给返回值一个可以存放该类型地址的内存单元,例如int a;a=a(*函数名)(传递的内容),这是有返回值的使用,无返回值时不需要一个有一个内存单元去承接,直接使用a(*函数名)(传递的内容)。
#include <stdio.h>
int sr(int data){
return ++data;
}
void printwelcome(){
puts("程序启动,欢迎使用");
}
int main()
{
void (*p)();//定义了一个函数指针变量
int (*p1)(int data);//一般直接复制函数的整体,然后把函数名变为相应的函数指针变量
p1=sr;//函数名就是函数的首地址
p=printwelcome;//指向函数
printwelcome();
(*p)();//指针调用函数
printf("%d",(*p1)(10));//在函数调用时注意把实际的值或者地址进行传输