本文从初学者的角度,深入浅出地详解什么是指针、如何使用指针、如何定义指针、如何定义数组指针和函数指针,并给出对应的实例演示;接着,区别了数组指针与指针数组、函数指针与指针函数;最后,对最常混淆的引用传递、值传递和指针传递做了区处。

C++中一个重要的特性就是指针,指针不仅具有获得地址的能力,还具有操作地址的能力。指针可以用于数组、或作为函数的参数,用来访问内存和对内存的操作,指针的使用使得C++很高效,但是指针也非常危险,使用不当会带来比较严重的问题。

1、指针

程序中所有的变量和常量都存在一个内存地址中,当然,函数也有对应的内存地址,内存地址的不同会导致程序执行时有所不同。

指针就是用来控制和存储内存地址的变量,它指向单个对象的地址,除了void之外,指针的数据类型与所指向地址的变量数据类型保持一致。

2、如何定义指针、数组指针、函数指针

常见的指针定义有3种:变量指针、数组指针和函数指针的定义。

(1)、变量指针的定义

int* p=0;//定义指针p,并初始化指针为0,即指向的地址为0000 0000或int a=0;//定义初始化常量aint* p;//定义指针pp=&a;//指针p指向a的地址,即指针获取地址

(2)、数组指针的定义

int a[]={0,1,2,3,4,5,6,7,8,9};//定义数组int* p=a;//定义并赋值数组指针,即获得数组的首地址

(3)、函数指针的定义

int f();//定义函数int (*p)();//定义函数指针p=f;//赋值函数指针,即获得函数代码的首地址

区别变量指针、数组指针和函数指针的定义的示例代码如下。

#includeusing namespace std;int f()//定义一个函数{cout<结果如下图:

3、数组指针与指针数组

数组指针是一个指针变量,它指向一个数组,即指向一个数组的指针就是数组指针;而指针数组是一个只包含指针元素的数组,它的元素可以指向相同类型的不同对象。

4、函数指针与指针函数

函数指针就是指向函数的存储空间地址的指针,可以对函数指针进行赋值并且通过函数指针来调用函数,它的本质是一个指针。而指针函数只是说明它是一个返回值为指针的函数,其本质是一个函数。

5、引用传递、值传递和指针传递

C++语言中,函数的参数和返回值的传递方式有3种:即值传递、引用传递和指针传递。

(1)、值传递

形参是实参的拷贝,改变形参的值并不会影响外部实参的值。从被调用函数的角度来说,值传递是单向的(实参->形参),参数的值只能传入,不能传出。当函数内部需要修改参数,并且不希望这个改变影响调用者时,采用值传递。

(2)、指针传递

形参为指向实参地址的指针,当对形参的指向操作时,就相当于对实参本身进行的操作。

(3)、引用传递

形参相当于是实参的“别名”,对形参的操作其实就是对实参的操作,在引用传递过程中,被调函数的形式参数虽然也作为局部变量在栈中开辟了内存空间,但是这时存放的是由主调函数放进来的实参变量的地址。被调函数对形参的任何操作都被处理成间接寻址,即通过栈中存放的地址访问主调函数中的实参变量。正因为如此,被调函数对形参做的任何操作都影响了主调函数中的实参变量。

最后,总结一下指针和引用的相同点和不同点:

相同点:

都是地址的概念,指针指向一块内存,它的内容是所指内存的地址;而引用则是某块内存的别名。

不同点:

指针是一个实体,而引用仅是个别名;

引用只能在定义时被初始化一次,之后不可变;指针可变;引用“从一而终”,指针可以“见异思迁”;

引用没有const,指针有const,const的指针不可变;(具体指没有int& const a这种形式,而const int& a是有的,前者指引用本身即别名不可以改变,这是当然的,所以不需要这种形式,后者指引用所指的值不可以改变)

引用不能为空,指针可以为空;

“sizeof 引用”得到的是所指向的变量(对象)的大小,而“sizeof 指针”得到的是指针本身的大小;

指针和引用的自增(++)运算意义不一样;

引用是类型安全的,而指针不是(引用比指针多了类型检查)。

喜欢此篇文章或觉得这篇文章对你有帮助的读者可以分享给身边的朋友们。如果你是小白也可以私信回复“资料”领取大礼包一份,以及开发工具一份。

delphi7存储过程传入数组_C++中的指针、数组指针与指针数组、函数指针与指针函数...相关推荐

  1. delphi7存储过程传入数组_js数组方法reduce

    JS数组Reduce方法详解 reduce方法将会对数组元素从左到右依次执行reducer函数,然后返回一个累计的值. reduce函数的参数 reduce函数接收两个参数,第一个参数是回调函数red ...

  2. c ++创建二维数组_C ++中的二维数组

    c ++创建二维数组 介绍 (Introduction) A two-dimensional array in C++ is the simplest form of a multi-dimensio ...

  3. c#将字符串转换为数组_C#中怎样把一个字符串转换成字符形数组?

    展开全部 例: stringa="abcdefg"; string[]b=newstring[a.Length]; for(inti=0;i { b[i]=a.Substring( ...

  4. 将数组a中满足条件的数放入数组b中

    输入当前为数组a[6],各个元素值自行输入: 定义数组b的长度为b[6](未知数组长度时,尽量定义较大的空间): 循环遍历a中的元素是否满足条件,满足时将其放入b中,定义j为数组b中当前元素的位置,不 ...

  5. delphi7存储过程传入数组_数据结构线性表之顺序存储 类的封装

    自己编程也挺久的了,然而数据结构这块是很弱的部分,然而这个东西对编程又异常重要,虽然这么久我一直没感受到.所以最近集中学习一下.正好手里有一本大话数据结构,就按照该书的顺序往下学习. 开始学习之前,要 ...

  6. linq where 数组_C#中LINQ与数据管道

    假如有一个集合,里面有数字1-10,现在想实现从这10个数字中取出偶数数字,然后将得到的偶数乘以10,最后输出前三个.代码如下: 代码非常的简单,最后会得到20.40.60这三个数字,但结果并不是我们 ...

  7. avframe转byte数组_C# amp; VB6.0 图像与二维数组 互转

    背景 最近在研究C#进行图像处理,在图像处理中算法中,往往都是针对的是矩阵运算的.矩阵其实就是一个二维的数组. 为了图像处理的速度,我们都需要放在内存中处理.但网络上收集的代码,往往都是以一维数组的样 ...

  8. php取出多维数组的所有元素,php - 获取多维数组PHP中两个元素之间的所有数组 - SO中文参考 - www.soinside.com...

    [我需要帮助.我有PHP困难.这是多维数组,我想将"信贷协议摘要"数组和"信贷协议"数组之间的所有数组完全放入一个单独的数组中.我试图使用range()函数,但 ...

  9. php如何反向排列数组,php中的sort()如何排列目录结构数组?

    我正在从官方手册中学习php,刚刚学习了Arrays部分的示例#13 https://www.php.net/manual/en/language.types.array.php 当我从命令行使用ph ...

最新文章

  1. Lucene第一篇【介绍Lucene、快速入门】
  2. 领航的公开课 有空可以看看
  3. python 搭建web应用程序_用Python构建数据科学Web应用程序
  4. 高清HDMI接口保护用TVS二极管阵列选型
  5. Linux中网络通信中 使用的结构体
  6. 专访快手传输算法负责人周超博士:LAS标准的推出离不开信念感
  7. 搭建Git Server - Centos+Gitosis
  8. php mssql_init,Php Mssql操作简单封装支持存储过程
  9. promise的理解和应用
  10. 主成分分析法的SPSS操作
  11. 20191107 关于mui的app打包
  12. 使用VMWARE安装Mac OSX 雪豹操作系统并配置iphone开发环境
  13. Hibernate第五篇【inverse、cascade属性详解】
  14. ubuntu虚拟机开机黑屏系列解决办法
  15. mysql proxy atlas_mysql-proxy Atlas
  16. HTML页面左上角图标
  17. Centos7配置dhcp服务
  18. Coin Changing
  19. 螯合物116052-88-1,DOTA-P-苯-NO2具有强亲水性
  20. 《绝版游戏之拳皇wing》

热门文章

  1. C++工作笔记-C++中assert的作用
  2. Java基础入门笔记-添加包
  3. android 属性动画实例,Android 属性动画Animator工具类代码案例
  4. shell函数可接受不同参数
  5. ios web页面测试方法
  6. 计算机网络之传输层:4、TCP连接管理
  7. PyTorch之实现LeNet-5卷积神经网络对mnist手写数字图片进行分类
  8. redis持久化功能
  9. Rsync未授权访问漏洞记录(影响范围:全版本,端口:873)
  10. 6. OD-去除收费软件次数限制,去除退出软件时弹出的广告(比如可执行5次)