一、指针数组:存放指针的数组。
示例代码:
#include<stdio.h>
int main()
{
int a = 4;
int *p = &a;
int *q = NULL;
int *w = NULL;
int *arr[3] = { p,q,w };
printf("%d %p %p", *arr[0], arr[1], arr[2]);
}
运行结果:
二、数组指针:指向数组的指针。
(1)一维数组指针
示例代码:
#include<stdio.h>
int main()
{
int a[3] = { 1,2,3 };
int(*p)[3] = &a;
printf("%d\n", *((*p)+0));
printf("%d\n", *((*p) + 1));
return 0;
}
运行结果:
(2)二维数组指针
示例代码:
#include<stdio.h>
int main()
{
int a[3][2] = { {1,2},{3,4},{5,6} };
int(*p)[3][2] = &a;
printf("%d\n", *(*((*p)+0)+1));
printf("%d\n", *(*((*p) + 1) + 1));
return 0;
}
运行结果:
三、函数指针:指向函数地址的指针
示例代码:
#include<stdio.h>
void fun1()
{
printf("hello world!\n");
}
int main()
{
void(*p)() = &fun1; //函数指针的定义
(*p)(); //*先与p结合,再与函数调用符()结合
return 0;
}
运行结果:
四、函数指针数组:存放函数指针的数组
示例代码:
#include<stdio.h>
void fun2()
{
printf("HOW are you ?\n");
}
void fun1()
{
printf("hello world!\n");
}
void fun3()
{
printf("I am ok!\n");
}
int main()
{
void(*p[3])() = { &fun1,&fun2,&fun3 }; //函数指针的定义与赋值
p[0]();
p[1]();
p[2]();
return 0;
}
运行结果:
五、指向函数指针数组的指针:
示例代码:
#include<stdio.h>
void fun2()
{
printf("HOW are you ?\n");
}
void fun1()
{
printf("hello world!\n");
}
void fun3()
{
printf("I am ok!\n");
}
int main()
{
void(*a[3])() = { &fun1,&fun2,&fun3 };
void (*(*p)[3])()=&a; //函数指针数组的指针的定义与赋值
(*(*(p)+0))(); //函数调用
(*(*(p)+1))(); //函数调用
return 0;
}
运行结果: