一、指針:內(nèi)容是指示一個(gè)內(nèi)存地址的變量;類型是指示編譯器怎么解釋指針內(nèi)容指向地址中的內(nèi)容,以及該內(nèi)存區(qū)域有多大;
例子:
[cpp]
int i = 0;
int * pi = &i;
printf(“pi = %x \n”, pi); // 打印pi的內(nèi)容: 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
二、數(shù)組:是一個(gè)單一數(shù)據(jù)類型對象的集合。其中單個(gè)對象沒有被命名,通過索引訪問證券從業(yè)代考 期貨從業(yè)代考
數(shù)組名和指針的區(qū)別:數(shù)組名的內(nèi)涵在于其指代實(shí)體是一種數(shù)據(jù)結(jié)構(gòu),這種數(shù)據(jù)結(jié)構(gòu)就是數(shù)組。數(shù)組名的外延在于其可以轉(zhuǎn)換為指向其指代實(shí)體的指針,而且是一個(gè)指針常量。指向數(shù)組的指針則是另外一種變量類型,僅僅意味著數(shù)組的存放地址
注意:雖然數(shù)組名可以轉(zhuǎn)換為指向其指代實(shí)體的指針,但是它只能被看作一個(gè)指針常量,不能被修改,如下護(hù)士代考 心理咨詢師代考
[cpp]
int intArray[10];
intArray++; // 錯(cuò)誤
“指針和數(shù)組等價(jià)”說的是什么?索引操作相同,例如: p[2]; a[2];
三、引用(reference)是一個(gè)對象的別名。用對象初始化引用后,對象的名字和引用都指向該對象;
引用是如何實(shí)現(xiàn)的? 從匯編語言的角度來看,指針和引用是一樣的:
[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
指針和引用的區(qū)別(從C++使用角度來看):
不存在空引用
引用要初始化
引用初始化后,不能指向另一個(gè)對象
這是由編譯階段保證的。
備注:一個(gè)指向非常量的引用不能用字面值或者臨時(shí)值初始化;但是一個(gè)指向常量的引用可以會計(jì)從業(yè)代考 會計(jì)職稱代考
例子:
[cpp]
double&d = 12.3; // error!
const double& d = 12.3;