99久久全国免费观看_国产一区二区三区四区五区VM_久久www人成免费看片中文_国产高清在线a视频大全_深夜福利www_日韩一级成人av

c++ 引用和指針區別

初學C++時,很容易把指針和引用的用法混在一起,下面通過一些示例來說明指針和引用兩者之間的差別。

1、兩者的定義和性質不同

指針是一個變量,存儲的是一個地址,指向內存的一個存儲單元;

引用是原變量的一個別名,跟原來的變量實質上是同一個東西。

int a = 996;
int *p = &a; // p是指針, &在此是求地址運算
int &r = a; // r是引用, &在此起標識作用

上面定義了一個整型變量 a,p 是一個指針變量,p 的值是變量 a 的地址;

而引用 r,是 a 的一個別名,在內存中 r 和 a 占有同一個存儲單元。

2、指針可以有多級,引用只能是一級

int **p; // 合法
int &&a; // 不合法

3、指針可以在定義的時候不初始化,引用必須在定義的時候初始化

int *p; // 合法
int &r; // 不合法
int a = 996;
int &r = a; // 合法

4、指針可以指向NULL,引用不可以為NULL

int *p = NULL; // 合法
int &r = NULL; // 不合法

5、指針初始化之后可以再改變,引用不可以

int a = 996;
int *p = &a; // 初始化, p 是 a 的地址
int &r = a; // 初始化, r 是 a 的引用

int b = 885;
p = &b;	// 合法, p 更改為 b 的地址
r = b; 	// 不合法, r 不可以再變

6、sizeof 的運算結果不同

int a = 996;
int *p = &a;
int &r = a;

cout << sizeof(p); // 返回 int* 類型的大小
cout << sizeof(r); // 返回 int 類型的大小

在64位機器上,int* 類型的大小為8個字節,int類型的大小為4個字節。

sizeof 是C/C++ 中的一個操作符(operator),其作用就是返回一個對象或者類型所占的內存字節數。

7、自增運算意義不同

如下圖所示,p++之后指向a后面的內存,r++相當于a++。

8、指針和引用作為函數參數時,指針需要檢查是否為空,引用不需要

void fun_p(int *p)
{
    // 需要檢查P是否為空
    if (p == NULL) 
    {
        // do something
    }
}

void fun_r(int &r)
{
    // 不需要檢查r
    // do something
}

使用引用的意義和作用:

既然引用時變量的別名,那別名的意義有時什么呢?

1.  引用作為函數的參數,其作用與指針作為函數參數相似,函數對形參的操作,等于對實參本身進行操作;

2.  函數調用時,系統采用值傳遞的方式將實參的值傳遞給形參,系統會在內存中開辟空間來存儲形參變量,并將實參的值復制給形參, 而采用引用作為函數形參,只要傳給函數實參的別名,不需要耗費時間在內存中開辟空間存儲形參,使用引用,可以提高函數的時間效率,并節省內存空間。

3. C++中推薦使用引用而非指針作為函數的參數,指針作為函數形參變量時,調用函數時仍需要在內存中分配空間。

4. C++的數組類型是帶有長度信息的,引用傳遞時 如果是數組必須指定數組的長度。

#include <iostream>
using namespace std;
 
// 函數聲明
void swap(int& x, int& y);
 
int main ()
{
   // 局部變量聲明
   int a = 100;
   int b = 200;
 
   cout << "交換前,a 的值:" << a << endl;
   cout << "交換前,b 的值:" << b << endl;
 
   /* 調用函數來交換值 */
   swap(a, b);
 
   cout << "交換后,a 的值:" << a << endl;
   cout << "交換后,b 的值:" << b << endl;
 
   return 0;
}
 
// 函數定義
void swap(int& x, int& y)
{
   int temp;
   temp = x; /* 保存地址 x 的值 */
   x = y;    /* 把 y 賦值給 x */
   y = temp; /* 把 x 賦值給 y  */
  
   return;
}

當上面的代碼被編譯和執行時,它會產生下列結果:
交換前,a 的值: 100
交換前,b 的值: 200
交換后,a 的值: 200
交換后,b 的值: 100

指針的意義和作用:

指針是一個變量,其值為另一個變量的地址,即,內存位置的直接地址。就像其他變量或常量一樣,您必須在使用指針存儲其他變量地址之前,對其進行聲明。

暫時就這么多吧!

聲明:本內容為作者獨立觀點,不代表電子星球立場。未經允許不得轉載。授權事宜與稿件投訴,請聯系:editor@netbroad.com
覺得內容不錯的朋友,別忘了一鍵三連哦!
贊 1
收藏 2
關注 19
成為作者 賺取收益
全部留言
0/200
成為第一個和作者交流的人吧
主站蜘蛛池模板: 国产暴力强伦轩1区二区小说 | 一区二区三区视频免费视频观看网站 | av网页观看 | 性欧美18一19sex性欧美 | 国产精品自在在线免费 | 久草免费在线视频 | 日本一二三区在线观看 | 国产黄色在线 | 无码人妻一区二区免费AV | 亚洲高清无吗 | 久久网精品视频 | 制服丝袜中文字幕无码自拍 | 无码国内精品人妻少妇蜜桃视频 | 久久亚洲国产精品五月天婷 | 无码国产69精品久久久久 | AV无码免费一区二区三区 | 97超碰人人干 | 99激情网 | 日本视频免费看 | 丝袜无码一区二区三区 | 亚洲精品综合精品自拍 | 午夜理理伦A级毛片天天看 一区视频免费观看 | 超碰97免费观看 | 中文字幕久久波多野结衣AV | 91精品国产福利 | 国产色视频在线播放 | 91兔费视频 | 一级做a爰片久久毛片一 | 琪琪午夜成人理论福利片美容院 | 裸体午夜一级视频 | 色眯眯av| 日韩激情无码一级毛片 | 国产永久免费观看 | 欧美大BBBB流白水 | 久久综合99re88久久爱 | 字幕专区码中文欧美在线 | 欧美乱妇日本无乱码特黄大片 | 加勒比无码专区中文字幕 | 488成人啪啪片 | 成人一级片免费看 | 性一交一乱一做一爰 |