指针是一种保存变量地址的变量。在c语言中,指针的用途十分广泛,而其与数组和函数的关系也十分密切。下面我们来简单介绍一些指针的应用。

1.指针数组

指针数组:首先它是一个数组,这个数组中的内容都是指针变量。如:int  * parr  [3]   是指一个数组中有3个元素,每个元素都是int *类型。如下图所示
     
2.数组指针
数组指针:首先它是一个指针,指向一个数组的地址。如:int  (*parr) [10] = &arr;指针指向一个数组,这个数组有10个元素。如下图所示:
下面引用《c语言深度剖析》中的一道题举例说明
#include<stdio.h>int main()
{int a[5] = { 1, 2, 3, 4, 5 };int *ptr = (int *)(&a + 1);printf("%d,%d", *(a + 1), *(ptr - 1));return 0;
}
该程序输出结果为 2 ,5。分析过程:
&数组名  ——int  (*)[5]——此处为一个数组指针,对它+1即 +sizeof[a] * sizeof(int] =20个字节
数组名——int *——此处是数组首元素地址,对它+1即向后移动 sizeof(int) 个字节。
3.函数指针
 函数指针:指针有能力指向一个函数。
#include<stdio.h>
#include<stdlib.h>void fun(const char *str)
{printf("%s", str);
}
int main()
{void(*pfun)(const char *) = &fun;(*pfun)("hello world\n");system("pause\n");return 0;
}

其中  *pfun 是一个函数指针,指向void fun()

4.函数指针数组
 函数指针数组:首先它是一个数组,数组中的每个元素都是指针,这个指针可以指向一个函数。
#include<stdio.h>
#include<stdlib.h>void fun1(const char *str)
{printf("fun1:%s", str);
}
void fun2(const char *str)
{printf("fun2:%s", str);
}
void fun3(const char *str)
{printf("fun3:%s", str);
}int main()
{int i = 0;/*void(*pfun1)(const char *) = fun1;void(*pfun2)(const char *) = fun2;void(*pfun3)(const char *) = fun3;*/void(*pfunarr[3])(const char *) = { fun1, fun2, fun3 };for (i = 0; i < 3; i++){pfunarr[i]("hello world\n");}system("pause\n");return 0;
}

其中,pfunarr 是一个函数指针数组,数组有3个元素,每个元素是一个函数指针,这个指针能够指向一个函数,这个函数的参数是const char *,返回值为void

5.指向函数指针数组的指针
   首先它是一个指针,指向一个数组,这个数组中的每个元素都是指向函数的指针,如void (* (*ppfunarr) [3]))(const char *) = &pfunarr;多用于处理复杂函数。

c语言:数组指针,指针数组,函数指针,函数指针数组,指向函数指针数组的指针相关推荐

  1. 指针详解(包含指针,指针数组,数组指针,指向数组指针的指针,函数指针,函数指针数组,指向函数指针数组的指针)

    大家都知道,指针有双面性,灵活度高,但是运用时一定要避免野指针和空指针的出现.否则会出现一些意想不到的错误.话不多说,看下面的代码: int main() {int arr[10] = { 0 };/ ...

  2. C语言 指向函数的指针

    C语言程序在编译后,每个函数都有一个首地址(也就是函数第一条指令的地址),这个地址称为函数的指针.可以定义指向函数的指针变量,使用指针变量间接调用函数. 先用一个简单的程序来说明: #include ...

  3. C语言中的指针应用,函数指针,指针函数,结构体中定义函数指针。

    指针函数 指针函数就是一个返回指针的函数,其本质是一个函数,该函数的返回值是一个指针. 声明一个指针函数 int* fun(int x,int y); 例子 typedef struct _Data{ ...

  4. C语言中指向函数的指针(我见过的讲的最清晰的文章)

    转帖自: http://wenku.baidu.com/view/7e566448cf84b9d528ea7a57.html 1 定义和调用 程序在编译后,每个函数都有一个首地址(也就是函数第一条指令 ...

  5. 指向函数的指针--转

    http://book.51cto.com/art/200908/146363.htm 5.1.2 指向函数的指针 C语言通过&和*操作符来操作数据的地址,但它并没有提供一个用一般的方式来操作 ...

  6. C七:指向函数的指针 ------ 函数指针(function pointer)

    函数具有可赋值给指针的物理内存地址,一个函数的函数名就是一个指针,它指向函数的代码.一个函数的地址是该函数的进入点,也是调用函数的地址.函数的调用可以通过函数名,也可以通过指向函数的指针来调用.函数指 ...

  7. 指向函数的指针 ------ 函数指针(function pointer)

    函数具有可赋值给指针的物理内存地址,一个函数的函数名就是一个指针,它指向函数的代码.一个函数的地址是该函数的进入点,也是调用函数的地址.函数的调用可以通过函数名,也可以通过指向函数的指针来调用.函数指 ...

  8. 【数据结构基础】指向函数的指针

    文章目录 一.函数的指针 二.指向函数的指针变量 三.调用函数的两种方式 四.用指向函数的指针作函数参数(重点) 五.为什么要将指向函数的指针变量作为函数的形参(重点) 一.函数的指针 首先,函数名代 ...

  9. 20返回指针的函数与指向函数的指针

    一.返回指针的函数 指针也是C语言中的一种数据类型,因此一个函数的返回值肯定可以是指针类型的. 返回指针的函数的一般形式为:类型名 * 函数名(参数列表) 比如下面这个函数,返回一个指向char类型变 ...

  10. C语言编程>第十八周 ⑧ 给定程序中,函数fun的功能是:将形参指针所指结构体数组中的三个元素按num成员进行升序排列。

    例题:给定程序中,函数fun的功能是:将形参指针所指结构体数组中的三个元素按num成员进行升序排列. 注意:请勿改动主函数main与其他函数中的任何内容,仅在横线上填写所需的若干表达式或语句. 代码如 ...

最新文章

  1. 前端如何查看音频的长度_重学前端基础:如何查看文档对象的所有属性?如何文档查找节点?...
  2. python ai应用开发_AI应用开发实战 - 从零开始搭建macOS开发环境
  3. A+B Problem 详细解答 (转载)
  4. Leetcode 240.搜索二维矩阵II (每日一题 20210727 同一题)
  5. win8: hello gril
  6. idea java添加属性快捷键_Intellij IDEA 常用 设置 及 快捷键 (持续更新)
  7. Integer进制转换
  8. 如何在 Laravel 中 “规范” 的开发验证码发送功能
  9. 【代码笔记】iOS-底下滚动,上面标题栏也会跟着变动
  10. 2月28日 PCA降维,SVD压缩,中心化、归一化、标准化、k-l变换
  11. 已知空间三点求圆心坐标,在matlab中的实现方法
  12. 如何写PRD (附PRD案例)
  13. 【oracle】中文数字转阿拉伯数字
  14. 市场需求分析(MRD)模板
  15. c#程序设计实训报告心得体会_C#实训总结报告
  16. linux灯控软件,Ubuntu下通过脚本控制键盘背光灯
  17. ubuntu 22.04下载wine及一些问题
  18. php 送货单管理系统,送货单管理软件下载
  19. No URLs will be polled as dynamic configuration sources警告处理
  20. CSS / JS 实现粘性头部(滚动到一定位置后固定)

热门文章

  1. azkaban任务调度时报错error=13, 权限不够
  2. IIS中配置PHP运行环境
  3. centos7重启网卡命令(centos7重启网卡命令只通了一下)
  4. linux新建文件 权限
  5. 杭州蓝然IPO被终止:年营收2.37亿 楼永通控制39%股权
  6. 动态获取本地json文件,渲染为表格-前端html+css+javascript,nth-child选择器,实时浏览插件,vscode,ajax
  7. Manjaro安装YCM
  8. Maya快速导出fbx脚本
  9. Android分屏功能,适配及相关问题
  10. 极客战记作业完成情况