關於引用指針的使用

原创 2004年09月29日 13:36:00
     今天有朋友又問我一個關於引用指針的問題:
const int a=4;
const int *pi = &a;
const int *&ri = pi; // ok  const int *&ri = &a error
     他說為甚麼 const int *&ri = &a會出現錯誤,而const int *&ri = pi卻可以通過編譯.ri不也是一個指針嘛,它為甚麼不能夠接收a變量的地址呢?
     其實我們只要將上述代碼反彙編,就可以知道原因了.
4:      const int *pi = &a;
0040102F   lea         eax,[ebp-4]
00401032   mov       dword ptr [ebp-8],eax
5:      const int *&ri = pi;
00401035   lea         ecx,[ebp-8]
00401038   mov       dword ptr [ebp-0Ch],ecx 
      上面是我在VC中得到的彙編碼.第六行清楚地說明保存在ri中的其實是一個指向a變量的指針的地址,而不是我們想像當中的a變量的地址.所以一旦我們使用const int *pi = &a這條語句給引用指針賦值,那麼編譯器轉出的彙編碼就會先將a變量的地址保存在某個寄存器中,然後再把寄存器的地址傳給ri這個引用指針.這些操作你是否發現了甚麼不妥之處?對了,寄存器的地址是不能夠被直接被使用的,所以編譯器就不可能產生那條語句的目標碼,自然要報錯啦.

引用與指針

一、在声明中见到这两个操作符(*和&)时: ①在程序声明变量的时候使用的*,只是表明“它是一个整数,这个整数为某个内存地址,一次访问sizeof(type)长度”。这点不要和(*)操作符混淆; ...
  • turbogofi
  • turbogofi
  • 2013年07月31日 18:17
  • 391

指針和引用

指针是C系语言的特色。指针是C++提供的一种颇具特色的数据类型,允许直接获取和操纵数据地址,实现动态存储分配。      指针问题,包括常量指针、数组指针、函数指针、this指针、指针传值、指向指针...
  • SongCdut
  • SongCdut
  • 2011年12月05日 00:28
  • 2057

指向指針的指針

    #include iostream>  #include string>  using namespace std;    void print_char(char* array[],int ...
  • cjj2007
  • cjj2007
  • 2008年04月20日 12:39
  • 319

指針

#include int f(int *P); int g(int k); int main() { int i=6; printf("&i=%p\n",&i); f(&i)...
  • liuzhenghui666666
  • liuzhenghui666666
  • 2016年02月01日 22:00
  • 134

指針的檢測

void minmax(int a[],int len,int *max,int*min); int main(void){ int a[]={1,2,3,4,5,6,7,8,9,12,13,1...
  • liuzhenghui666666
  • liuzhenghui666666
  • 2016年02月03日 21:30
  • 166

ABAP 指針常用语法

1、定義指針:指針的定義主要有以下語句定義任意類型的指針,但是不具備欄位結構(僅僅是一個地址)  FIELD-SYMBOLS TYPE ANY.參考數據庫表定義(這種指針是含有欄位結構的,參考...
  • jesson0083
  • jesson0083
  • 2010年04月21日 17:59
  • 2788

C 语言指针详解

//////////////////////////////////////C 语言指针详解////////////////////////////////////////// 一.指针: 在信息...
  • xiangjiazhi
  • xiangjiazhi
  • 2011年04月23日 15:27
  • 1353

C程序设计语言--指针与数组(三)常量指针 指针常量

其实这个概念比上篇文章中的概念好理解的多。其实简单一点讲,“常量指针”所指向的地址上的数据是常量,而“指针常量”所指向的地址是常量,地址上面的数据是可以变化的。 常量指针,就是指向常量的指针,关键字...
  • yusiguyuan
  • yusiguyuan
  • 2013年10月04日 14:50
  • 1511

C指针和堆空间 [李园7舍_404]

相关笔记:C指针和堆空间、C malloc()实际分配空间大小。 0 堆内存的在计算机内存中的形式 根据《The C Programming language》推测得到堆内存,图中的Hea...
  • misskissC
  • misskissC
  • 2013年11月11日 14:54
  • 2490

函數指針

 1461.cpp : 定義主控台應用程式的進入點。//#include "stdafx.h"#includevoid f1(char* vc,int *vi)  {    std::cout  } ...
  • packe_peng_520
  • packe_peng_520
  • 2005年09月25日 21:54
  • 791
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:關於引用指針的使用
举报原因:
原因补充:

(最多只允许输入30个字)