----前段时间看见大家在积极的讨论指针有关的问题;这不由的让我想起当初自己学习指针,真是要了老命啊,一直没搞懂带"*"的问题,一个带"*"还好理解,多了就晕了,回忆起来,这是我当初的“死板”学习;现在做嵌入式,系统方面接触的比较多,当你看内核代码的时候,就有好多指针操作,所以深知指针的重要性,现在这段时间开始写这一系列的专题分享给大家,希望对大家理解指针有一定的帮助,同时Linux应用编程还是在同步更新的,这周会写进程的文章分享。在今天开始写文章之前,插一个面试题,也是我自己这几天无意发现的;这里我以一个void set()函数,和void set1(void)函数(c语言里面没有函数重载这个用法,所以就这样区分写了)为示例:

注:新一点的编译器不会通过编译,比如5.11的dev-c++就编译不能通过。这里我主要讨论的问题是void set()和void set1(void),这里可以从上面的图中可以看到不带void为参数的函数,里面可以写多参数进去,而且不会有问题,但是写了void参数,那就不能写参数就进去(这个在实际开发当中,当然是没有人吃饱了饭去这样写代码,但是往往在一些公司面试笔试题目就会有这种坑爹的题目,你说你对c语言是掌握的好,但是有可能就因为这道题目,叫你说出它的区别了,你一下不知所措了,可能就被out了)。

一、什么是指针?

1、我们先从最熟悉的普通变量说起;当我们定义一个普通变量,变量在我们的编译器的帮助下,会把我们已经写好的变量名和实际的物理地址衔接起来(这个变量名其实就是一个物理地址的助记符,方便我们理解分析),从而实现了对内存中指定地址区域的数据的操作,这就是变量的实现原理,变量在内存中的地址又称作指针,我们说“变量的地址” 就等价于 “变量的指针”,但是指针和指针变量是不一样的。从这里我们可以看出指针跟普通变量没啥子区别,所以看到指针操作不要害怕,要静下来慢慢享受,哈哈哈。

二、指针变量的概念:

1、 从上面我们可以看到,每个变量都有一个符号地址(变量名)和物理地址(在内存中的位置,又叫做指针)。变量是可以存储数据的,但是指针变量与普通变量不同,它用来存放普通变量的地址,即指针变量是用来存放普通变量的指针。要知道,指针变量也是一个变量,在内存中也是占内存的,只不过它不存放基本类型数据,而是存放其他基本类型变量的地址。既然指针变量也有自己的物理地址,那么指针变量的地址用什么 来存储呢?用比该指针类型高一级的指针变量来存放指针变量的地址,如二级指针变量存放一级指针变量的地址,三级指针变量存放二级变量的地址,依次类推。

2、指针使用三部曲:定义指针变量、关联指针变量、解引用

(1)当我们int *b定义一个指针变量p时,因为p是局部变量,所以也遵循C语言局部变量的一般规律(定义局部变量并且未初始化,则值是随机的),所以此时b变量中存储的是一个随机的数字。

(2)此时如果我们解引用b,则相当于我们访问了这个随机数字为地址的内存空间。那这个空间到底能不能访问不知道(也许行也许不行),所以如果直接定义指针变量未绑定有效地址就去解引用几乎必死无疑;如果虽然随便指定一个东西也是不行的。

(3)定义一个指针变量,不经绑定有效地址就去解引用,就好象拿一个上了镗的枪随意转了几圈然后开了一枪。

(4)指针绑定的意义就在于:让指针指向一个可以访问、应该访问的地方(就好象拿着枪瞄准目标的过程一样),指针的解引用是为了间接访问目标(就好象开枪是为了打中目标一样)

三、实际操作:

注:上面是我进行了一维和二维指针以及多维指针的操作和一些各种地址的打印操作,&b,&c,&d,都是打印指针本身的地址(也就可以印证上面说的话,指针和普通变量一样,都有自己的地址)。

四、总结:

今天的分享主要是讲了一下指针的概念,这非常重要,对后面的指针操作有非常大的理解作用,很多人学晕了,就是这入门指针概念这块没有彻底理解它,所以导致后面对指针的操作,会感到感觉没有学指针一样,一脸懵逼的状态,看到指针就头痛,所以希望这篇文章对大家有用。

c++ int8_t转int_c专题之指针-----什么是指针?相关推荐

  1. c++ char数组初始化_c专题指针数组与指针的关联

    ----在今天开始写文章之前,让我不由的想起高中里面学的一篇文章中一段话语,是荀子写的<劝学>:积土成山,风雨兴焉:积水成渊,蛟龙生焉:积善成德,而神明自得,圣心备焉.故不积跬步,无以至千 ...

  2. C++ 笔记(14)— 指针(指针声明、取地址、取值、new/delete、NULL指针、指针运算、指针数组、数组指针、指针传递给函数、从函数返回指针)

    1. 声明指针 指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址.就像其他变量或常量一样,您必须在使用指 针存储其他变量地址之前,对其进行声明. 指针变量声明的一般形式为: type * ...

  3. Go 学习笔记(13)— 指针定义、指针特点、空指针、指针数组、指向指针的指针、指针作为函数入参

    1. 复合数据类型 Go 语言基本的复合数据类型有指针.数组.切片.字典.通道.结构和接口等.格式如下: * pointerType // 指针类型, [n]elementType // 数组类型, ...

  4. C指针9:指针数组(即数组中的每个元素都是指针)

    前边已经讲过数组指针,强调的是指针,意思就是该指针指向的是数组(数组里边的元素一般为普通数据). 指针数组,强调的是数组,意思就是该数组里边的每个元素都是指针类型.即如果一个数组中的所有元素保存的都是 ...

  5. C指针6:指针变量作为函数参数

    在C语言中,函数的参数不仅可以是整数.小数.字符等具体的数据,还可以是指向它们的指针.用指针变量作函数参数可以将函数外部的地址传递到函数内部,使得在函数内部可以操作函数外部的数据,并且这些数据不会随着 ...

  6. C语言中“野指针”、“悬空指针”是什么?

    目录 1."野指针"(wild pointer) 2."悬空指针"(dangling pointer) 1."野指针"(wild point ...

  7. 从变量地址到指针再到指针变量

    标题中的3个概念:变量地址.指针and指针变量是依次出现的,逐个确定就可以明晰到底什么是我们常说的指针(其实是指针变量) 首先,变量在本质上是一段存储空间,既然是存储空间,就必有地址,一般每个字节有一 ...

  8. 2020-09-25C++学习笔记引用2:二级指针形参与指针形参的使用方法和区别重难点,主看综合代码(1、指针形参2、引用形参3、二级指针形参4、指针引用形参)

    2020-09-25C++学习笔记引用2:二级指针形参与指针引用搭配做形参的使用方法区别重难点,注意事项主看综合代码(1.指针形参2.引用形参3.二级指针形参4.指针引用形参) 1.指针引用 #inc ...

  9. 深入理解指针以及二级指针(指针的指针)

    前言:本文将讲解指针的定义.指针变量和普通变量的本质区别.一级指针和二级指针的关系以及如何通过二级指针修改一级指针所指向的内存.文末还附加了两个实例,帮助读者加深对二级指针的理解.本文试图通过图表的方 ...

最新文章

  1. php 抽象类 接口 区别,PHP中抽象类、接口的区别与选择分析
  2. 优盘中发现计算机病毒怎么办,【网警课堂】教你解决U盘使用中出现的各种问题!...
  3. 2015-2016 ACM-ICPC Southwestern Europe Regional Contest (SWERC 15)
  4. nlv sqlserver_未能使用提供程序“DataProtectionConfigurationProvider”进行解密。提供程序返回错误消息为: 该项不适于在指定状态下使用...
  5. c语言函数的使用步骤,c语言打开文件函数使用方法
  6. 求链表的倒数第m个元素
  7. Debug解决问题方法论
  8. 在N多气象服务构成的疯狂数据城 AS8000挑起大梁
  9. layui option 动态添加_layui select如何动态添加option
  10. 如何下载谷歌地球高程为TIF格式的文件
  11. IDEA开发环境中maven 项目配置使用JDK9,JDK10,JDK11,JDK12等
  12. CentOS 、Linux 配置国内阿里源、yum源镜像
  13. 强子对撞机下午3时半开始一次全轨道试验,如果产生黑洞,人类将在今日消失
  14. 解决Vue3的undefined问题
  15. HTML5CSS3:Day03 2D动画 3D动画 CSS3过渡
  16. 一、C++基础入门之 Windows下C/C++开发环境配置
  17. 预言机理解:A Scalable Architecture for On-Demand, Untrusted Delivery of Entropy
  18. 相片尺寸规格像素一览
  19. 详解GloVe词向量模型
  20. 虚拟机soft lockup CPU死锁问题

热门文章

  1. python 无头模式 绕过检测_网络爬虫之使用pyppeteer替代selenium完美绕过webdriver检测...
  2. html 拖拽选择表格,JS拖动选择table里的单元格完整实例【基于jQuery】
  3. webpack react项目搭建一:环境
  4. 【STL源码学习】std::list类的类型别名分析
  5. Eclipse快捷键 10个最有用的快捷键---摘录
  6. 【转】Linux下gcc编译生成动态链接库*.so文件并调用它
  7. UC将发布高性能HTML5游戏引擎X-Canvas
  8. 世界杯后linux进化有感?
  9. VS2005中单元测试自定义异常的方法
  10. 软件测试准备(摘要)