程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++ 指針、數組和引用辨析

C++ 指針、數組和引用辨析

編輯:C++入門知識

一、指針:內容是指示一個內存地址的變量;類型是指示編譯器怎麼解釋指針內容指向地址中的內容,以及該內存區域有多大;   例子:     [cpp]  int i = 0;   int * pi = &i;   printf(“pi = %x  \n”, pi);     // 打印pi的內容: 0x2000   printf(“*pi= %d  \n” , *pi);   // 打印pi指向地址中的值: 5   printf(“&pi= %x  \n”, &pi);    // 打印pi的地址: 0x100       從匯編的角度來看,指針是這樣的: int i = 0; 010E139E  mov         dword ptr [i],0   int * pi = &i; 010E13A5  lea         eax,[i]   010E13A8  mov         dword ptr [pi],eax   二、數組:是一個單一數據類型對象的集合。其中單個對象沒有被命名,通過索引訪問。 數組名和指針的區別:數組名的內涵在於其指代實體是一種數據結構,這種數據結構就是數組。數組名的外延在於其可以轉換為指向其指代實體的指針,而且是一個指針常量。指向數組的指針則是另外一種變量類型,僅僅意味著數組的存放地址 注意:雖然數組名可以轉換為指向其指代實體的指針,但是它只能被看作一個指針常量,不能被修改,如下:   [cpp]  int intArray[10];   intArray++; // 錯誤     “指針和數組等價”說的是什麼?索引操作相同,例如: p[2];  a[2];     三、引用(reference)是一個對象的別名。用對象初始化引用後,對象的名字和引用都指向該對象;   引用是如何實現的? 從匯編語言的角度來看,指針和引用是一樣的: [cpp]       int i = 0;   00E9139E  mov         dword ptr [i],0         int & ref = i;   00E913A5  lea         eax,[i]     00E913A8  mov         dword ptr [ref],eax         int * pi = &i;   00E913AB  lea         eax,[i]     00E913AE  mov         dword ptr [pi],eax      指針和引用的區別(從C++使用角度來看): 不存在空引用 引用要初始化 引用初始化後,不能指向另一個對象 這是由編譯階段保證的。       備注:一個指向非常量的引用不能用字面值或者臨時值初始化;但是一個指向常量的引用可以。 例子: [cpp]   double&d = 12.3;  // error!   const double& d = 12.3;        

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved