首页 > 编程语言 >c++中指针和引用的区别?

c++中指针和引用的区别?

时间:2023-09-21 12:56:49浏览次数:35  
标签:变量 c++ 传递 访问 内存 指针 引用

1.指针是一个实体,需要分配内存空间,引用是一个变量的别名,不需要分配内存空间。

2.引用在定义的时候必须进行初始化,并且不能改变。引用的值不能为NULL,指针在定义的时候不一定要初始化,并且指针所指向的空间是可变的,可以指向NULL。

3.sizeof指针得到的是指针本事的大小,sizeof引用得到的是引用所指向变量(对象)的大小。

4.指针可以为多级 例如二级指针,但是引用只能有一级。

5.作为参数时,指针传递本质是值传递,传递的值是指针的地址;引用的传递本质是地址传递,传递的是变量的地址。

6.指针和引用的自增运算结果不一样。(指针是指向下一个空间,引用时引用变量值加1).

7. 指针访问一个变量是间接访问,引用访问一个变量是直接访问(使用指针访问变量时,需要先声明一个指针变量,然后使用取址运算符"&“将变量的地址存储在指针变量中,最后通过解引用运算符”*"来获取变量的值。而引用则是直接使用变量的名称来访问和修改其值,无需借助指针。)

8.如果返回动态内存分配的对象或者内存,必须使用指针,引用可能引起内存泄漏。(如果将动态分配的对象通过引用返回,则无法直接通过引用来处理该对象的生命周期。引用本身并不拥有内存,它只是一个别名,通过引用返回动态内存分配的对象,会导致无法释放该内存,从而产生内存泄漏)

标签:变量,c++,传递,访问,内存,指针,引用
From: https://www.cnblogs.com/heartoftheleaf/p/17719694.html

相关文章

  • 【c&c++】C++中memset()函数的用法详解
    头文件:cstring 或 memory话说刚开始使用memset的时候一直以为memset是对每一个int赋值的,心里想有了memset还要for循环对数组进行初始化干嘛。但其实memset这个函数的作用是将数字以单个字节逐个拷贝的方式放到指定的内存中去memset(dp,0,sizeof(dp));int类型的变量一般占......
  • c++ 读写注册表
    classCConfig{HKEY_hKey;public:~CConfig(){if(_hKey){RegCloseKey(_hKey);}}CConfig():_hKey(0){}LSTATUSSave(PCWSTRlpValueName,DWORDdwType,co......
  • 【引用】Oracle全文检索方面的研究(全5)
    3.5Storage属性Oracle全文检索通常会生成一系列的辅助表,生成规则是dr$+索引名+$+表用途标识,由于这些表是oracle自动生成的,通常没有办法为这些表指定存储空间。为构造text索引所生成的辅助表指定表空间、存储参数(usethestoragepreferencetospecifytablespaceandcreation......
  • 【引用】Oracle全文检索方面的研究(全3)
    3.3Lexer属性               Oracle全文检索的lexer属性用于处理各种不同的语言,最基本的英文使用basic_lexer,中文则可以使用chinese_vgram_lexer或chinese_lexer。   3.3.1Basic_lexerbasic_lexer属性支持如英语、德语、荷兰语、挪威语、瑞典语等以空格......
  • 【引用】Oracle全文检索方面的研究(全6)
    3.6Wordlist属性Oracle全文检索的wordlist属性用来设置模糊查询和同词根查询,wordlist属性还支持子查询和前缀查询,oracle的wordlist属性只有basic_wordlist一种(原文:Usethewordlistpreferencetoenablethequeryoptionssuchasstemming,fuzzymatchingforyourlang......
  • 【引用】Oracle全文检索方面的研究(全2)
    3.2Filter属性过滤器负责将各种文件格式的数据转换为纯文本格式,索引管道中的其他组件只能处理纯文本数据,不能识别microsoftword或excel等文件格式,filter有charset_filter、inso_filter、null_filter、user_filter、procedure_filter几种类型。(可将文档格式转化为数据库文......
  • 【引用】Oracle全文检索方面的研究(全9)
    3.10常用的脚本3.10.1.删除preference:beginctx_ddl.drop_preference('my_lexer');end; 3.10.2.索引重建:ALTERINDEXnewsindexREBUILDPARAMETERS('replacelexermy_lexer'); 3.10.3同步索引beginctx_ddl.sync_index('myindex','2M');end;或通过后......
  • Java 的值传递与引用传递
     实参与形参我们都知道,在Java中定义方法的时候是可以定义参数的。比如Java中的main方法,publicstaticvoidmain(String[]args),这里面的args就是参数。参数在程序语言中分为形式参数和实际参数。形式参数:是在定义函数名和函数体的时候使用的参数,目的是用来接收调用该函数时......
  • c++ 简单模拟js Promise
    main:#include<stdio.h>#include"common.h"#include"promise.h"#include<chrono>//std::chrono::seconds#include<thread>//std::this_thread::sleep_forintmain(void){Promise*pro=newPromise([](ca......
  • C++ 程序员入门需要多久,怎样才能学好?
    学习成为一名熟练的C++程序员需要时间和努力,具体的时间取决于个人的学习速度、学习方法和学习目标。以下是一些建议,以帮助您入门并学好C++:基础知识学习(数周至数月):开始学习C++的基础语法,包括变量、数据类型、运算符、控制流程(如条件语句和循环)、函数等。学习C++标准库,包括常用的容器......