C++指针和引用,C++引用在本质上是什么,它和指针到底有什么区别-,详解C++中指针和引用的区别

C++指针和引用,C++引用在本质上是什么,它和指针到底有什么区别?,详解C++中指针和引用的区别

本文主要介绍C语言中指针和引用的区别,通过示例代码非常详细的介绍,对大家的学习或者工作有一定的参考价值。有需要的朋友下面和边肖一起学习。

1、指针和引用的本质(是什么)

(1)指针是存储内存地址的变量,特别的地方是它存储内存地址。所以指针的大小不会像其他变量一样变化,只是与当前平台相关的——个不同平台的内存地址范围不同。在32位平台下,最大内存为4GB,所以只需要32位存储,所以size of(指针)的大小为4字节。64位平台下,32位不够用。如果所有的内存地址都可以一一表示,那就需要64位(不过目前应该没有这么大的内存吧?),所以sizeof(指针)是8。

(2)引用的本质是“变量的别名”,即赋予变量一个新的名称。既然是“别名”,就必须有本体。

2、声明和初始化时的区别

指针指向一个内存地址,所以可以指向地址0x00000000,不需要初始化就可以声明(不推荐),即指针=NULL;

是引用变量的别名,别名必须对应一个“实名”,所以必须在声明的时候初始化,不能初始化为null。

3、使用时区别

(1)根据声明和初始化的区别,声明期内指针随时可能为空,使用时要检查,防止出现空指针和野指针;不过,你不用担心引用的问题。只要初始化了,就可以在任何地方直接使用,不用担心会不会空。

(2)因为指针存储的是内存地址,由于可以存储初始化(或赋值)的地址,所以在指针的生命周期内也可以存储其他地址。只要你是同类型的变量(不同类型对应的类型偏移量不一样),对于指针来说是可以的。

作为变量AA的别名,在它的整个生命周期中只能是“从头到尾”,而且总是第一次初始化它的变量的别名。在此期间对它的任何操作都等同于对变量AA的操作。

空谈不值钱,给你看看我的代码。

/* *指针和引用的示例* */

Std:string s1='萝卜';

Std:string s2='青菜';

STD:string S3=' egg ';

Std:string s4='番茄';

/* *指针可以初始化为空* */

STD:string * p _ Str=NULL;

/* *必须首先初始化引用* */

STD:string r _ Str=S1;

p _ Str=s2

Std:cout '我是指针' * p _ Strstd:endl;/* *绿色蔬菜* */

Std:cout '我在引用' r _ Strstd:endl;/* *萝卜* */

STD:cout STD:endl;

Std: cout' * * * * * * * *修改指针并引用* * * * * * * * * * ' STD:endl;

/* *分别修改指针和引用* */

r _ Str=s3/* *尝试将r_Str作为s3的别名* */

p _ Str=s4/** p_Str再次指向S4 * */

Std:cout '我是指针' * p _ Strstd:endl;/* *西红柿* */

Std:cout '我在引用' r _ Strstd:endl;/* *鸡蛋* */

STD:cout STD:endl;

Std: cout' * * * * * * * *检查just修改对初始初始化的影响* * * * * * * * " STD:endl;

/* *好像成功了,都是按本意修改的。不过,等一下* */

Std:cout '我是s1 '的1s TD:endl;/* *蛋!立正!**/

Std:cout '我是S2 ' s 2s TD:endl;/* *绿色蔬菜* */

Std:cout '我是s3 '的3s TD:endl;/* *鸡蛋* */

Std:cout '我是S4 ' s 4 STD:endl;/* *西红柿* */

/**

发现s1的‘萝卜’被改成了和s3一样的‘青菜’,这也说明了对reference的任何操作都等同于对原变量本身的操作。

相比之下,指针的自由度很高,想指向谁就指向谁,不影响任何之前指向的变量。

不意外不意外:)

**/

4、总结

一个不恰当的比喻是,指针就像一个“渣男”,可以(注意有可能,但不一定)到处调情(可以随时指向任何地址);语录就像一个“老实人”,只能“以一开头(谁发起就以一结尾)”。

另外,根据《More Effective C++》上Scott Meyers的说法,只有在确定需要在开头初始化,不需要指向其他类型的情况下,才应该使用引用,否则都应该使用指针。

我弟弟知道庸俗和浅薄。如果有什么不对的地方,请拍拍他。

以上是边肖介绍的C中指针和引用的区别。希望对你有帮助。如果您有任何问题,请给我留言,边肖将及时回复您。非常感谢您对我们网站的支持!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • vs2015打包安装程序,vs2015程序打包,VS2022实现VC++打包生成安装文件图文详细历程
  • vc++6.0的快捷键,vc 快捷键
  • vc++6.0的快捷键,vc 快捷键,VC6.0常用快捷键大全
  • 绘制圆角矩形的方法,c++ 画矩形,C#画圆角矩形的方法
  • 懒汉式和饿汉式代码,单列模式懒汉和饿汉,C++单例模式的懒汉模式和饿汉模式详解
  • 好用的C++编译器,c++编译软件哪个好
  • semaphore c#,c++ semaphore
  • semaphore c#,c++ semaphore,C++中Semaphore内核对象用法实例
  • dev-c++使用教程,dev c++安装教程
  • dev-c++使用教程,dev c++安装教程,Dev C++ 安装及使用方法(图文教程)
  • C里面指针常量和常量指针的区别,c++指针常量和常量指针
  • C里面指针常量和常量指针的区别,c++指针常量和常量指针,简单总结C++中指针常量与常量指针的区别
  • com组件初始化失败,c#开发com组件,C++中COM组件初始化方法实例分析
  • c++静态成员变量使用,c++静态成员函数和静态成员变量
  • c++静态成员变量使用,c++静态成员函数和静态成员变量,详解c++ 静态成员变量
  • 留言与评论(共有 条评论)
       
    验证码: