指针 与 引用

一、指针

  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、虽说引用的使用对变量的处理比指针更快,但有一点引用比不上指针,就是对堆空间的申请,

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

原文地址:https://www.cnblogs.com/goul/p/9470530.html

时间: 2024-08-30 14:52:15

指针 与 引用的相关文章

从Java到C++——指针与引用

C++即有指针又有引用,而且很多时候具有相似的功能,常常容易让人混淆,着实让人头痛.用两句通俗的话说明两者本质的含意:引用就是一个变量或对象的别名(引用的本质是一个对象):指针是一个段内存空间的地址(指向存储一个变量值的空间或一个对象的空间):如下图所示:     C++中的引用与指针 引用 引用是为变量或对象起的另外一个别名,定义形式:T& v;  T为类型,v为变量名.使用引用时,注意以下几点: 1.引用在创建的时候必须被初始化(指针可以在任何时候赋值) 2.一旦引用初始化后,就不能改变引用

C++指针参数引用

粘个代码占位置,以后有时间把指针函数,函数指针都补上 #include <iostream>using namespace std;void freePtr1(int* p1){    /*未释放内存前 ->  p1 Address : 0012FDDC  p1 value : 003429B8,     在这里,p1它也是一个变量,既然是一个变量,     那么它将会以值的传递,把外部变量p1传到栈内,在栈内产生一个地址:0012FDDC,     当然,它的值不会变仍然是指向堆地址:

c++指针与引用问题

本来是回答问题的,到这里做个笔记 *&L是指针的引用,实参是个指针.所以L是实参指针的别名,对别名L的修改,等于对实参的修改.*L是传值,你无法改变传过来的实参指针变量的值程序代码: #include<iostream>using namespace std;void foo(int*p);int main(){    int a=5;    int *b=&a;    printf("%d %d\n",b,*b);    foo(b);    printf

(C/C++)区别:数组与指针,指针与引用

1.数组跟指针的区别 数组要么在静态存储区被创建(如全局数组),要么在栈上被创建.数组名对应着(而不是指向)一块内存,其地址与容量在生命期内保持不变,只有数组的内容可以改变. 指针可以随时指向任意类型的内存块,它的特征是“可变”,所以我们常用指针来操作动态内存.指针远比数组灵活,但也更危险. 数组和指针特点的简单比较: 数组 指针 保存数据 保存地址 直接访问数据 间接访问数据,先取得指针的内容,然后以它为地址取得数据 用于存储数目固定且类型相同的数据 通常用于动态数据结构 编译器自动分配和删除

指针与引用同与不同

一.指针与引用的定义及特性 A.引用(reference):为一个已经存在的对象另起一个名字.它有以下特性: 1.必须初始化 2.始终指向同一个对象,不能更改其所指向的对象 3.自身只是一个别名,不占内存,对其取地址是其指向对象的地址 4.常量引用的意义在于不能通过引用来修改其所指向对象的值,其所指对象可以不是常量 int tempA = 2; const int ctempA = 2; /*1.正常使用*/ int &refA = tempA; const int &crefA = ct

[C/C++基础--笔试突击] 7.指针与引用

概述: 比较抽象的但又很有用的东西 0.0 void*指针:可以保存任何类型对象的地址. 指向指针的指针 函数指针 7.1 指针 一个有效的指针必然是一下三种状态之一: 1)保存一个特定对象的地址: 2)指向某个对象后面的另一个对象 3)0值. 若指针保存0值,表明它不指向任何对象.未初始化的指针是无效的,直到给该指针赋值后,才可使用. 注:*p++和(*p)++不等价,单目运算符*的优先级比++高,故*p++先完成取值操作,然后对指针地址执行++操作,而(*p)++是首先执行屈指操作,然后对该

指针和引用的区别(More Effective c++ )

指针与引用看上去完全不同(指针用操作符"*"和"->",引用使用操作符". " ),但 是它们似乎有相同的功能.指针与引用都是让你间接引用其他对象.你如何决定在什么时候 使用指针,在什么时候使用引用呢? 首先,要认识到在任何情况下都不能使用指向空值的引用.一个引用必须总是 指向某些 对象 .因此如果你使用一个变量并让它指向一个对象, 但是该变量在某些时候也可能不指向 任何 对象,这时你应该把变量声明为指针,因为这样 你可以赋空值给该变量.相

指针与引用的区别

相同点: 1.     指针与引用都是地址的概念.指针指向一块内存,指针的内容是所指向内存的地址:而引用则是某块内存的别名. 2.     引用在语言内部用指针实现. 3.     一般把引用理解为指针,不会犯严重语义错误.引用操作可以看做是受限的指针(仅允许取内容操作). 不同点: 1.     指针逻辑上是独立的,可以改变指针的内容,也可以改变指针指向的内存中的内容:而引用只是一个别名,在逻辑上不上独立的,它的存在具有依附性,必须在声明时就初始化,而且引用的对象在整个生命周期中时不能被改变的

指针与引用的区别以及引用的三种用法

1.指针与引用的区别: 指针是一块内存的地址值,而引用是一块内存的别名. 下面引自:http://www.cnblogs.com/kingln/articles/1129114.html 从概念上讲.指针从本质上讲就是存放变量地址的一个变量,在逻辑上是独立的,它可以被改变,包括其所指向的地址的改变和其指向的地址中所存放的数据的改变. 而引用是一个别名,它在逻辑上不是独立的,它的存在具有依附性,所以引用必须在一开始就被初始化,而且其引用的对象在其整个生命周期中是不能被改变的(自始至终只能依附于同一

浅谈C++中指针和引用的区别

指针和引用在C++中很常用,但是对于它们之间的区别很多初学者都不是太熟悉,下面来谈谈他们2者之间的区别和用法. 1.指针和引用的定义和性质区别: (1)指针:指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元:而引用跟原来的变量实质上是同一个东西,只不过是原变量的一个别名而已.如: int a=1;int *p=&a; int a=1;int &b=a; 上面定义了一个整形变量和一个指针变量p,该指针变量指向a的存储单元,即p的值是a存储单元的地址. 而下面2句定义了一