C/C++ 一段代码区分数组指针|指针数组|函数指针|函数指针数组
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
/* 举列子说明什么是函数指针 */ //以一个加减乘除 void Add(int a, int b){
printf("%d + %d = %d \n" , a , b , a+b);
} void Sub(int a , int b ) {
printf("%d - %d = %d \n", a, b, a - b);
} void Mul(int a, int b) {
printf("%d * %d = %d \n", a, b, a * b);
}
void Div(int a, int b) {
printf("%d / %d = %d \n", a, b, a / b);
} //对于数组指针。
void func() {
int * py[] ; //定义一个数组指针
int aa[] = { ,,,,, };
py[] = aa;
for (int i = ; i < sizeof(aa) / sizeof(int) ; i++)
printf("%d " , py[][i]);
puts("");
}
//对于指针数组
void funcp() { int(*pt)[] ;
int aa[] = { ,,,, };
pt= &aa;
for (int i = ; i < ; i++) {
printf("%d ",(*pt)[i]);
}
puts("");
} int main( void ) {
system("echo 下面现实的是指针数组 ");
funcp();
system("echo 下面现实的是数组指针 ");
func();
//函数指针的用处
system("echo 下面现实的是函数指针 ");
void (*p)(int, int)= Add;
p(,);
//函数数组指针 ,这里需要区分指针数组和数组指针
/*
...[]优先级高于*
数组指针 : (*p)[] 像函数指针一样,表示对于一个数组的指针,指针的类型是数组
int a[10];
int (*p)[]=a;
指针数组 : *p[] ==*(p[]) 数组里的每一个元素为都为指针 */
system("echo --下面现实的是函数指针数组---- ");
void(*ps[])(int, int) = { Add , Sub , Div ,Mul };
for (int i = ; i < ; i++) {
ps[i](,);
}
getchar();
return ;
}

由上面那个列子:
我们就可以大概知道这些:
指针 ---》指向的是一个地址、
数组指针: 形如 int *p[4] -->说的是 p[0]~p[3]均为指针:
如图:

对于指针数组: 形如: int (*p)[5] ;
这 *p是一个指针,但是不是一个 普通的一级指针,有点像二级指针,但是没有二级指针那么大的权限,这样比喻吧:
举个日常的列子:
早上我们都要吃早饭(你丫,要是硬要说你不吃,那就不吃好了! ),但是至于要吃什么--随便,但是规定你,只能吃五碗。指针数组就是这样,你可以指向任何东西,但是都有限制(元素有限制)。
函数指针: 顾名思义是指向函数的指针, 形如: void (*p) (int a ) ; 这个指针的指向范围就更加的小了,就是只能指向函数。就好比,你早上要么不吃早饭,要吃,就得给老子吃胡萝卜啥的一样一样的。
至于函数指针数组,函数数组指针,其实搞懂了,前面的几种含义,后面的这些指针的意思,大概都可以有清晰的认识。
const int *p ; ----指针常量,其所指向的对象,只能有读取的权限,并没有写入的权限。
int * const p ; -----常量指针,其地址不能改变。但是改地址的值可读可写。
-----------------以上都是依据自己编程经验的理解,以及平时使用的理解来写的。如果有误,还请指点。--------------------------
C/C++ 一段代码区分数组指针|指针数组|函数指针|函数指针数组的更多相关文章
- opengl笔记——旋转,一段代码的理解
重看:opengl笔记——OpenGL好资料备忘 在找到这段代码,对理解opengl旋转很有帮助 ... glPushMatrix(); // initialze ModelView matrix g ...
- 【转】 BSS段 数据段 代码段 堆栈 指针 vs 引用
原文:http://blog.csdn.net/godspirits/article/details/2953721 BSS段 数据段 代码段 堆栈 (转+) 声明:大部分来自于维基百科,自由的百科全 ...
- JavaScript-navigator_userAgent-编写一段代码能够区分浏览器的主流和区分
1 userAgent:包含浏览器名称和版本号的字符串 <!DOCTYPE html> <html> <head lang="en"> < ...
- 给指针malloc分配空间后就等于数组吗?
首先回答这个的问题:严格的说不等于数组,但是可以认为它是个数组一样的使用而不产生任何问题.不过既然这样,那它应该算是个数组吧.所以,一般我们都用“动态数组”这种名字来称呼这种东西. 要讲清楚这个东西, ...
- 给指针malloc分配空间后就等于数组吗?【转】
首先回答你的问题:严格的说不等于数组,但是可以认为它是个数组一样的使用而不产生任何问题. 不过既然这样,那它应该算是个数组吧.所以,一般我们都用“动态数组”这种名字来称呼这种东西. 要讲清楚这个东西, ...
- 一段代码的疑问(1)——unsigned与signed
现象: 先来看一段代码: 这段代码的输出结果是: -84 4294967264 分析: xiaoqiang@dev:~/cpp$ g++ -g c212.cc -o temp xiaoqiang@de ...
- 一段代码看 Java 引用类型
Java 中的操作数(不知道叫什么,相对于 bytecode 而言,类似 CPU 的操作码和操作数)分为值类型和引用类型: 值类型就是直接存储最终数值的,如 char, int, float, dou ...
- 不可或缺 Windows Native (18) - C++: this 指针, 对象数组, 对象和指针, const 对象, const 指针和指向 const 对象的指针, const 对象的引用
[源码下载] 不可或缺 Windows Native (18) - C++: this 指针, 对象数组, 对象和指针, const 对象, const 指针和指向 const 对象的指针, con ...
- 《C和指针》 读书笔记 -- 第8章 数组
1.在C中,数组名的值是一个指针常量而不是指针变量,也就是数组第一个元素的地址. 2.数组和指针的区别: 声明一个数组时,编译器将根据声明所指定的元素数量为数组保留内存空间,然后再创建数组名,它的值是 ...
随机推荐
- C++ 函数后加const
1.非静态成员函数后面加const(加到非成员函数或静态成员后面会产生编译错误)2.表示成员函数隐含传入的this指针为const指针,决定了在该成员函数中, 任意修改它所在的类的成员的操作都是 ...
- Python 正则表达式指南 zz
zz http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html 1. 正则表达式基础 1.1. 简单介绍 正则表达式并不是Python的一 ...
- 序列的方法(str,list,tuple)
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 在快速教程中,我们了解了最基本的序列(sequence).回忆一下,序列包含有定值 ...
- Spark ML聚类分析之k-means||
今天更新了电脑上的spark环境,因为上次运行新的流水线的时候,有的一些包在1.6.1中并不支持 只需要更改系统中用户的环境变量即可 然后在eclipse中新建pydev工程,执行环境是python3 ...
- hdu 5587 规律
题意:开始序列{1}; 一次变换{1,1,2}: 两次变换{1,1,2,1,2,2,3} ... 求s[n];题解:打表 S1,S2,S4,S8,S16,S32......公式 S[n]=S[最近的比 ...
- select into from 和 insert into select 的区别和用法及 SQL SELECT INTO 中Undeclared variable错误解决办法
今天试了一下数据表中的数据备份到另一个空的数据表,然后使用了SQL SELECT INTO语句,然后提示Undeclared variable......错误,现在在这里做下总结并给出解决办法. 应用 ...
- maven使用入门(pom)
mvn clean complie mvn clean test mvn clean package mvn clean install(该任务将该项目输出的jar安装到了Maven本地仓库中) 各个 ...
- LINUX一切皆文件
只要用过linux的筒子,或者保守点说接触到一些linux思想的同志肯定听说过这样一句话,在linux下,“一切皆是文件”! 不错,今天walfred将在快速上手linux设备驱动这一块,谈谈linu ...
- css 常用样式命名规则
大家在写css的时候,对一些html标签起一个合适的名字是个很头疼的事情,现在给大家分享项目中常用的名字供参考. 外套:wrap ——用于最外层 头部:header ——用于头部 主要内容:mai ...
- STM32学习笔记(一) 如何新建一个STM32工程模板
学习stm32,第一步就是选择开发工具了,GCC,MDK,IAR每一种都有自己的优劣势,这里我选择使用MDK软件实现STM32模板.当然如果想更快的接触stm32实例,领略嵌入式开发的魅力,STM也提 ...