”指针数组 数组指针 函数指针 函数指针数组 指向函数指针数组的指针“的解析与学习经验

在所有学习c的程序员的学习过程中,无不在学习指针中花过许多功夫,而正是指针使c威力无穷,所以要想成为一名优秀的c程序员,对指针有一个深入而完整的理解是先决条件。

指针

在计算机科学中,指针是一种编程语言对象,其值指的是(或“指向”)存储在计算机内存中其他位置的另一个值,使用它的内存地址。指针引用存储器中的位置,并获得存储在该位置的值,称为对指针进行解引用。

指针数组:

是一个数组,数组的元素都是指针,数组占多少个字节由数组本身决定。它是“储存指针的数组”的简称。
例如:int *api[5];
api是某种类型的数组。在取得一个数组元素之后,随即执行的是间接访问操作。这个表达式不再有其他操作符,所以它的结果是一个整数值。
这里写图片描述

数组指针:

是一个指针,它指向一个数组。在32 位系统下永远是占4 个字节,至于它指向的数组占多少字节,不知道。它是“指向数组的指针”的简称。
这里写图片描述

函数指针:

函数指针最常用的两个用途是转换表和作为参数传递给另一个函数。对函数指针执行间接访问之前必须把它初始化为指向某个函数。下面的代码说明了一种初始化函数指针的方法。

int f(int);
int (*pf)(int)=&f;

指针可以引用可执行代码,也就是说,它可以指向函数、方法或过程。函数指针将存储要调用的函数的地址。虽然这个设施可以用来动态调用函数,但它通常是病毒和其他恶意软件编写者最喜欢的技术。

#include<stdio.h>
#include<stdlib.h>
void fp(){
    printf("haha\n");
}
int main(){
    printf("%p\n", fp);
    printf("%p\n", &fp);
    system("pause");
    return 0;
}

这里写图片描述

eg:(1) char *(*fun1)(char *p1,char *p2);
(2) char * *fun2(char p1,char p2);

第一个看起来像函数,其实他是函数指针,fun1是指针变量,他指向一个函数。这个函数有两个指针
类型的参数,返回值为 char * 型;
第二个看起来像指针,其实他是一个函数,fun2是函数名,参数为两个指针,返回值为 char 型二级
指针。 函数指针也很简单吧,其实他和普通指针一样,我们使用他的好处在于,可以将实现同一功能
的多个模块统一起来标识,这样可以使函数的接口与实现分开。

函数指针数组:

它是一个数组,数组元素为函数指针。
eg:char ( a[4])(char *p);
它是一个数组,数组名为 a ,数组内有四个指向函数的指针;这个指针
指向一些返回值类型为指向字符的指针,参数为指向字符的指针的函数。

函数指针数组指针:

它是一个指针,这个指针指向数组,这个数组里面存的都是指向函数的指针。
eg:char (( a)[4])(char *p);
这个指针指向包含了4个元素的数组;这个数组里面存的是指向函数的指针;这个指针指向一些返回值类型为指向字符的指针,参数为指向字符的指针的函数。

扫描二维码关注公众号,回复: 1064798 查看本文章

下面是一些指针的区别:

1.int *p[4];
//指针数组。 是个有4个元素的数组, 每个元素的是指向整型的指针。
(数组的每个元素都是指针)
2.int (*p)[4];
//数组指针。 它是一个指针,指向有4个整型元素的数组。
(一个指针指向有4个整型元素的数组)
3.int *func(void);
//指针函数。 无参函数, 返回整型指针。           
(函数的返回值为int*)    
4.int (*func)(void);
//表示函数指针,可以指向无参, 且返回值为整型指针的函数。
(函数的返回值为int)

猜你喜欢

转载自blog.csdn.net/xy294636185/article/details/80188854
今日推荐