一、指针

  1、指针与指针变量的区分

    a、指针:指针就是内存编号,也就是内存地址,通俗的讲,指针就是变量的地址。

      注1:指针的大小是根据计算机的操作系统而定的,跟变量类型无关

      注2:如果是32位的操作系统,那么在定义一个指针时,指针的大小为4字节,而64位的指针大小为8字节,

    b、指针变量:指针变量顾名思义,就是可以在地址(指针)中存储的变量。

      注1:存储的变量,不是指针地址,因此存储的数据与定义变量的类型有关

      注2:指针是一种类型,指针变量是一种变量,就好比 int   和 (int  j 中的j)的区别

  2、指针的作用

    a、函数与函数之间共享变量

        为什么需要共享变量:因为不同函数之间命名空间独立,如果只是值传递的话,不能解决函数之间值的”沟通问题“,这是就需要传递地址共享变量

    b、优化函数与函数之间的数据传递

        原因:如果通过值传递时数据过大比如ldouble类型的就是8个字节,而32位操作系统的指针的大小(4字节)是固定的,因此可以传输较快些

    c、直接访问硬件内存

        原因:应为硬件内存的编号就是指针,所以指针可以直接访问

    d、申请堆内存

        原因:1、堆内存只有编号,虽说编号就是名字,但编号过于冗长,有些繁琐,

              2、堆内存返回的就是一个指针,这是就需要一个指针来接受一个堆内存空间的地址

    e、方便处理一些相对复杂的类型

        比如,字符串、结构体等

  3、空指针与野指针

    a、空指针: 就是指针指向的NULL这个内存空间,NULL空间是一个特殊的空间,指针变量不能访问此空间,访问就会出错,出错的类型与操作系统有关

    b、野指针:就是指针指向的空间是未知的,不收程序员控制,

      1)空指针与野指针的比较 : 空指针就是定义一个指针时直接初始化赋值NULL,野指针就是定义是没有初始化

        a)空指针虽说定义了一定会错误,但可以收到控制

        b)野指针由于指向空间的未知的,不收程序员控制,因此是很危险的 ,因此在定义一个指针是最好初始化

        c)野指针可能造成一下3种情况:1、脏数据:就是将已经存在的数据给重新赋值覆盖掉

                       2、段错误:错误类型很多,需要根据情况而论

                       3、”一切正常“:这只是表面正常而已

二、引用

   1、引用的概念是在c++普及的,而指针最经常出现在c中

   2、引用最通俗的解释就是取别名

   3、引用的符号为: 类型名&  别名   例如int& a = b;

   4、引用与取地址符的区别 :在于(&变量)是在定义是定义时出现还是在定义后出现

      a)引用只有在初始化定义的时候才是引用

      b)取地址就是一个变量已经定义过了,在用&变量就是取变量的地址

三、总结

  讲道理引用与指针的区别不大,因为C++也是C的扩展版本,C++底层封装的就是C

  引用与指针的区别:

      1、引用是给一个变量取个别名,不会消耗内存孔家,指针需要先创建然后才能指向变量

      2、由第一点可以知道,引用访问、”传值“的速度更快,因此C++中一般都是用引用的

           a)、速度更快

           b)、为了与C有区别,两种语言如果没有区别,那么就不是两种语言了

      3、虽说引用的使用对变量的处理比指针更快,但有一点引用比不上指针,就是对堆空间的申请,

           原因:对空间的申请返回的是指针变量

C/C++ - 指针 与 引用的更多相关文章

  1. [速记]关于指针,引用和递归和解递归——C++

    在写基于二叉排序树的查找时,分为三个过程 1.二叉排序树的插入 2.二叉排序树的建立 3.基于二叉排序树的查找 其中第三部可以递归方式实现,也可以用while循环解递归,于是我想也解解第一步的递归,看 ...

  2. C++指针参数引用

    粘个代码占位置,以后有时间把指针函数,函数指针都补上 #include <iostream> using namespace std; void freePtr1(int* p1){ /* ...

  3. C/C++:提升_指针的指针和指针的引用

    C/C++:提升_指针的指针和指针的引用 写在前面 今天在使用指针的时候我发现了一个自己的错误.

  4. C++_系列自学课程_第_8_课_指针和引用_《C++ Primer 第四版》

    C语言最富有迷幻色彩的部分当属指针部分,无论是指针的定义还是指针的意义都可算是C语言中最复杂的内容.指针不但提供给了程序员直接操作硬件部分的操作接口,还提供给了程序员更多灵活的用法.C++继承这一高效 ...

  5. C++学习笔记 指针与引用

    指针与引用  1. 指针 (1) 指针是一个变量(实体),存储的是一个地址,指向内存的一个存储单元,指针可以为空 (2) 指针可以为空,在声明定义时可以不初始化 (3) 指针在初始化之后可以重新指向其 ...

  6. 数组类型与sizeof与指针的引用

    以char类型为例: char a[100];     //a类型为char[100]    &a类型为 char (*)[100]    *a类型为char char *p = a;     ...

  7. c++指针与引用问题

    本来是回答问题的,到这里做个笔记 *&L是指针的引用,实参是个指针.所以L是实参指针的别名,对别名L的修改,等于对实参的修改.*L是传值,你无法改变传过来的实参指针变量的值程序代码: #inc ...

  8. C++ 中指针与引用的区别

    指向不同类型的指针的区别在于指针类型可以知道编译器解释某个特定地址(指针指向的地址)中的内存内容及大小,而void*指针则只表示一个内存地址,编译器不能通过该指针所指向对象的类型和大小,因此想要通过v ...

  9. 详解c++指针的指针和指针的引用

    展示一下使用指针的指针和指针的引用修改传递给方法的指针,以便更好的使用它.(这里说的指针的指针不是一个二维数组) 为什么需要使用它们 当我们把一个指针做为参数传一个方法时,其实是把指针的复本传递给了方 ...

  10. 指针和引用的区别(c/c++)

      http://blog.csdn.net/thisispan/article/details/7456169 ★ 相同点: 1. 都是地址的概念: 指针指向一块内存,它的内容是所指内存的地址:引用 ...

随机推荐

  1. [HAOI2016]字符合并

    Luogu3736 很容易想到直接DP,关键是枚举顺序. \(1.\)设后一段构成最后一个点,前一段构成前面的点,那么能得到\(1\)个点的数量要求 : \(1,k,2k-1...\)相差\(k-1\ ...

  2. Git和Github的使用

    Git和Github的基本操作 一.了解Git和Github 1.什么是GIT? Git是一个免费.开源的版本控制软件 2.什么是版本控制系统? 版本控制是一种记录一个或若干个文件内容变化,以便将来查 ...

  3. 使用mvn archetype:generate快速建立Maven项目目录结构

    1.mvn archetype:generate  按照提示进行选择,默认选的话可以直接按回车键 2.mvn archetype:generate -DgroupId=组织名,公司网址的反写+项目名 ...

  4. Android Studio 配置Gradle总结

    一, 问题:①换个新电脑安装完Android Sutdio第一次打开一个工程巨慢怎么办? ② 手动配置Gradle Home为什么总是无效? ③ 明明已经下载了Gradle,配置了gradle hom ...

  5. Flask-migrate基本使用方法

    数据库迁移操作顺序: 1.python 文件 db init 2.根据需求修改模型 3.python flaskapp文件 db migrate -m"新版本名(注释)" 4.py ...

  6. this(ES6箭头函数里的this)

    一,了解前须知 1,箭头函数:出现的作用除了让函数的书写变得很简洁,可读性很好外:最大的优点是解决了this执行环境所造成的一些问题.比如:解决了匿名函数this指向的问题(匿名函数的执行环境具有全局 ...

  7. Cesium-entiy闪烁范例

    // name:"圆闪烁", function f1() { var x=1; var flog=true; viewer.entities.add({ name:"圆形 ...

  8. hadoop上hive的安装

    1.前言 说明:安装hive前提是要先安装hadoop集群,并且hive只需要再hadoop的namenode节点集群里安装即可(需要再所有namenode上安装),可以不在datanode节点的机器 ...

  9. numpy中与金融有关的函数

    fv函数 计算未来的价值 def fv(rate, nper, pmt, pv, when='end'): ... 参数: rate:存款/贷款每期的利率 nper:存款/贷款期数 pmt:存款/贷款 ...

  10. Linux内核管理子系统和进程管理子系统

    内核管理子系统职能:1.管理虚拟地址与物理地址的映射 2.物理内存的分配 程序:存放在磁盘上的一系列代码和数据的可执行映像,是一个静止的实体. 进程:是一个执行中的程序,它是动态的实体 进程四要素: ...