指针的引用和二级指针,指针是直接引用还是间接引用
今天小编为大家分享Windows系统下载、Windows系统教程、windows相关应用程序的文章,希望能够帮助到大家!
指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元;而引用跟原来的变量实质上是同一个东西,只不过是原变量的一个别名而已。
1.都是地址的概念;指针指向一块内存,它的内容是所指内存的地址;
1.指针是一个实体,而引用仅是个别名;
2.引用使用时无需解引用(*),指针需要解引用;
3.引用只能在定义时被初始化一次,之后不可变;指针可变;
4.引用没有 const,指针有 const;
5.引用不能为空,指针可以为空;
6.“sizeof引用”得到的是所指向的变量(对象)的大小,而“sizeof指针”得到的是指针本身(所指向的变量或对象的地址)的大小;
7.指针和引用的自增(++)运算意义不一样;
8.从内存分配上看:程序为指针变量分配内存区域,而引用不需要分配内存区域。
1、引用可以看作一个常量指针,如:
2、对于简单应用,从低层的实现来看是一样的:
3、但是在进行参数传递时就出现了不一样。
4、下面拷贝了关于函数传递指针和引用的讨论中一段内容,实在懒得写了,楼主凑合看吧。
5、参数传递指针时将直接对指针指向的地址进行操作
6、传递指针的引用时,通过间接寻址,来实现对〔指针指向的地址〕进行操作。
7、看看下面一段程序反汇编后的内容就很清楚了
8、//---------------------------------------------------------------------------
9、* Referenced by a CALL at Address:
10、//[ebp+08]即为压栈内容:n的有效地址
11、:00401154 8B4508 mov eax, dword ptr [ebp+08]
12、//取得主函数中m的有效地址--》edx
13、:00401157 8B10 mov edx, dword ptr [eax]
14、:00401159 8955FC mov dword ptr [ebp-04], edx
15、* Referenced by a CALL at Address:
16、//取得压栈内容:n的有效内容(即m的有效地址)
17、:00401164 8B4508 mov eax, dword ptr [ebp+08]
18、:00401167 8945FC mov dword ptr [ebp-04], eax
19、--------------->函数开始<----------------------------
20、:00401173 83C4F8 add esp, FFFFFFF8
21、:00401176 C745FC0A000000 mov [ebp-04], 0000000A
22、:0040117D 8D45FC lea eax, dword ptr [ebp-04]
23、:00401180 8945F8 mov dword ptr [ebp-08], eax
24、//由于形参是引用变量,所以将n的有效地址压栈
25、:00401183 8D55F8 lea edx, dword ptr [ebp-08]
26、:00401187 E8C4FFFFFF call 00401150
27、//由于形参是指针变量,所以将n的有效内容压栈(即m的有效地址)
28、:0040118D FF75F8 push [ebp-08]
29、:00401190 E8CBFFFFFF call 00401160
wwW.Xtw.Com.cN系统网专业的PC、手机系统开发下载平台,HarmonyOS系统、安卓、OS、windows电脑重装系统在线下载安装,操作系统平台技术学习,攻略教程,技术交流。
免责声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。内容仅供参考使用,不准确地方联系删除处理!
联系邮箱:773537036@qq.com