开始先来介绍一下什么是指针:
在计算机科学中,指针是编程语言中的一个对象,利用地址,它的值直接指向存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的称为“指针”。意思是通过它能找到以它为地址的内存单元。
简单来说,指针就是变量,用来存放地址的变量。
下面介绍指针数组与数组指针:
数组和指针有什么联系吗?
答案是:没有。指针数组是一个用来存放指针的数组,而数组指针是一个指针。
给出两个例子来认识指针数组与数组指针:
int *arr1[10];①指针数组
int (*p)[10];②数组指针
①中 * 指向数组,所以它是指针数组。
②中 * 先与 p结合,说明p是一个指针变量,p指向一个数组,所以②是数组指针。注意[]的优先级要高于 * ,所以要加( )保证 * 先与 p 结合。
函数指针:
指针可以指向一个值的地址,当然也可以指向一个函数的地址,用来存放函数。那么指针怎么指向函数地址,看一段代码:
void test()
{
printf("hehe");
}
int main()
{
void(*p)();
p = test;
printf("%p", p);
system("pause");
return 0;
}
p先和*结合,说明p是指针,指针指向的是一个函数,指
向的函数无参数,返回值类型为void。
函数指针数组
把函数的地址存放到数组中,那么这个数组就叫函数指针数组。
定义一个简单的函数指针数组:int(* parr[10])()
parr先和[]结合,说明parr是一个数组,数组的内容就是 int(*)() 类型的函数指针。
函数指针的数组的指针
函数指针的数组的指针 顾名思义就是一个指向 函数指针数组 的指针,是一个指针。
函数指针的数组的指针的定义:
void test(const char* str)
{
printf("%s\n", str);
}
int main()
{
void(*pfun)(const char*) = test;//函数指针pfun
void(*pfunArr[5])(const char* str);//函数指针的数组pfunArr
pfunArr[0] = test;
void(*(*ppfunArr)[10])(const char*) = &pfunArr;//指向函数指针数组pfunArr的指针ppfunArr
printf("%p", pfun);
system("pause");
return 0;
}