C/C++ 一段代码区分数组指针|指针数组|函数指针|函数指针数组
时间:2022-05-05
本文章向大家介绍C/C++ 一段代码区分数组指针|指针数组|函数指针|函数指针数组,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1 #include<stdio.h>
2 #include<stdlib.h>
3 #include<windows.h>
4 /* 举列子说明什么是函数指针 */
5
6 //以一个加减乘除
7
8 void Add(int a, int b){
9 printf("%d + %d = %d n" , a , b , a+b);
10 }
11
12 void Sub(int a , int b ) {
13 printf("%d - %d = %d n", a, b, a - b);
14 }
15
16 void Mul(int a, int b) {
17 printf("%d * %d = %d n", a, b, a * b);
18 }
19 void Div(int a, int b) {
20 printf("%d / %d = %d n", a, b, a / b);
21 }
22
23
24
25 //对于数组指针。
26 void func() {
27 int * py[5] ; //定义一个数组指针
28 int aa[] = { 1,2,3,4,5,6 };
29 py[0] = aa;
30 for (int i = 0; i < sizeof(aa) / sizeof(int) ; i++)
31 printf("%d " , py[0][i]);
32 puts("");
33 }
34 //对于指针数组
35 void funcp() {
36
37 int(*pt)[5] ;
38 int aa[] = { 1,2,3,4,5 };
39 pt= &aa;
40 for (int i = 0; i < 5; i++) {
41 printf("%d ",(*pt)[i]);
42 }
43 puts("");
44 }
45
46 int main( void ) {
47 system("echo 下面现实的是指针数组 ");
48 funcp();
49 system("echo 下面现实的是数组指针 ");
50 func();
51 //函数指针的用处
52 system("echo 下面现实的是函数指针 ");
53 void (*p)(int, int)= Add;
54 p(1,2);
55 //函数数组指针 ,这里需要区分指针数组和数组指针
56 /*
57 ...[]优先级高于*
58 数组指针 : (*p)[] 像函数指针一样,表示对于一个数组的指针,指针的类型是数组
59 int a[10];
60 int (*p)[]=a;
61 指针数组 : *p[] ==*(p[]) 数组里的每一个元素为都为指针
62
63 */
64 system("echo --下面现实的是函数指针数组---- ");
65 void(*ps[])(int, int) = { Add , Sub , Div ,Mul };
66 for (int i = 0; i < 4; i++) {
67 ps[i](1,2);
68 }
69 getchar();
70 return 0;
71 }
由上面那个列子:
我们就可以大概知道这些:
指针 ---》指向的是一个地址、
数组指针: 形如 int *p[4] -->说的是 p[0]~p[3]均为指针:
如图:
对于指针数组: 形如: int (*p)[5] ;
这 *p是一个指针,但是不是一个 普通的一级指针,有点像二级指针,但是没有二级指针那么大的权限,这样比喻吧:
举个日常的列子:
早上我们都要吃早饭(你丫,要是硬要说你不吃,那就不吃好了! ),但是至于要吃什么--随便,但是规定你,只能吃五碗。指针数组就是这样,你可以指向任何东西,但是都有限制(元素有限制)。
函数指针: 顾名思义是指向函数的指针, 形如: void (*p) (int a ) ; 这个指针的指向范围就更加的小了,就是只能指向函数。就好比,你早上要么不吃早饭,要吃,就得给老子吃胡萝卜啥的一样一样的。
至于函数指针数组,函数数组指针,其实搞懂了,前面的几种含义,后面的这些指针的意思,大概都可以有清晰的认识。
const int *p ; ----指针常量,其所指向的对象,只能有读取的权限,并没有写入的权限。
int * const p ; -----常量指针,其地址不能改变。但是改地址的值可读可写。
-----------以上都是依据自己编程经验的理解,以及平时使用的理解来写的。如果有误,还请指点。-------------
- volatile
- 用最简单的图文带你看懂区块链
- 微信小游戏正式上线!小程序的一个类目,即点即玩!
- CentOS7安装GitLab、汉化、邮箱配置及使用
- Bootstrap源码分析之transition、affix
- Redis从单机到集群,一步步教你环境部署以及使用
- C++内存管理学习堆和栈
- 人人公司宣布收购美国卡车社区平台Trucker Path
- Mysql字符串截取总结:left()、right()、substring()、substring_index()
- c++程序的内存格局
- SpringMVC中利用@InitBinder来对页面数据进行解析绑定
- 门罗盘点:2017年那些AI击败人类的瞬间
- sizeof和strlen的区别
- mysql索引使用技巧及注意事项
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Spring Security 中的 hasRole 和 hasAuthority 有区别吗?
- python常见的import导包技巧
- 真正了解贪心算法,这是一篇精华入门总结...
- MGR修改max_binlog_cache_size参数导致异常
- 【技术创作101训练营】TensorFlow Lite的 GPU 委托(Delegate)加速模型推理
- 弄懂这 5 个问题,拿下 Python 迭代器!
- 1500字,8个问题,彻底理解堆!
- Python画王者荣耀英雄能力雷达图
- Python语言的精华:Itertools库
- MySQL为什么lsof会看到这么多临时文件
- IE浏览器主页被劫持,如何解决主页被篡改问题?
- 参与国际化项目一定要遵循的java命名规范
- 威胁事件告警分析技巧及处置(二)
- 组复制安全 | 全方位认识 MySQL 8.0 Group Replication
- 那些年我们遇的bug