1. 指针数组
是数组,存放指针的数组。
下面的是三个指针数组的形式:
int* arr1[10];
char* arr2[20];
char* arr3[10];
2. 数组指针
是指针,有能力指向一个数组的的指针。
定义(简单的数组指针):
int (*p)[10];
//p 先和 * 结合,说明 p 是一个指针变量,然后指向的是一个大小为 10 个整型的数组,所以 p 是一个指针,指向一个数组,叫数组指针。
//[] 的优先级高于 * 号,所以必须加上()来保证 p 先和 * 结合。
下面我们给出几个例子:
int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
int (*parr)[10] = &arr;
*(parr[0] + 1); //*(*(parr+0)+1)
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int arr[3][5] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int(*p)[5] = arr;
int i = 0;
int j = 0;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 5; j++)
{
printf("%d\n", *(*(p + i) + j)); //printf("%d\n",p[i][j]);
}
}
system("pause");
return 0;
}
int (*parr3[10])[5]; //*parr3[10]表示数组有10个元素,每个元素是指针,该指针能指向大小为5个整型的数组
3.函数指针
指向函数的指针,存放函数的地址。
下面我们给出例子:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include <stdio.h>
int Add(int a, int b)
{
return a+b;
}
int main()
{
int (*pfun)(int , int) = Add;
printf("%d\n", pfun(1, 2));
system("pause");
return 0;
}
4.函数指针数组
每个元素都是指向函数指针的数组。
int(*pfun[5])(int, int) = { NULL, Add, Sub, Mul, Div };
5.指向函数指针数组的指针
int(*(*p)[5])(int, int); //p为指向函数指针数组的指针