指针与指针进阶

来源:互联网 发布:java 互斥锁 编辑:程序博客网 时间:2024/06/16 05:28

开始先来介绍一下什么是指针:

  在计算机科学中,指针是编程语言中的一个对象,利用地址,它的值直接指向存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的称为“指针”。意思是通过它能找到以它为地址的内存单元。
  简单来说,指针就是变量,用来存放地址的变量。

下面介绍指针数组与数组指针:

 数组和指针有什么联系吗?
   答案是:没有。指针数组是一个用来存放指针的数组,而数组指针是一个指针。
   给出两个例子来认识指针数组与数组指针:
   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;}