性无码一区二区三区在线观看,少妇被爽到高潮在线观看,午夜精品一区二区三区,无码中文字幕人妻在线一区二区三区,无码精品国产一区二区三区免费

米修兒
認(rèn)證:VIP會(huì)員
作者動(dòng)態(tài)
Qml實(shí)現(xiàn)多語言切換
2024-01-24 16:34
C#轉(zhuǎn)C++(數(shù)組復(fù)制、char轉(zhuǎn)16位無符號(hào)整數(shù))
2023-08-15 17:06
C# 中 SendMessage 函數(shù)
2023-08-07 10:47
C#實(shí)現(xiàn)一個(gè)程序控制另一個(gè)程序
2023-08-02 18:57
c++ 引用和指針區(qū)別
2023-08-02 18:52

c++ 引用和指針區(qū)別

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

1、兩者的定義和性質(zhì)不同

指針是一個(gè)變量,存儲(chǔ)的是一個(gè)地址,指向內(nèi)存的一個(gè)存儲(chǔ)單元;

引用是原變量的一個(gè)別名,跟原來的變量實(shí)質(zhì)上是同一個(gè)東西。

int a = 996;
int *p = &a; // p是指針, &在此是求地址運(yùn)算
int &r = a; // r是引用, &在此起標(biāo)識(shí)作用

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

而引用 r,是 a 的一個(gè)別名,在內(nèi)存中 r 和 a 占有同一個(gè)存儲(chǔ)單元。

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

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

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

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 的運(yùn)算結(jié)果不同

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

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

在64位機(jī)器上,int* 類型的大小為8個(gè)字節(jié),int類型的大小為4個(gè)字節(jié)。

sizeof 是C/C++ 中的一個(gè)操作符(operator),其作用就是返回一個(gè)對(duì)象或者類型所占的內(nèi)存字節(jié)數(shù)。

7、自增運(yùn)算意義不同

如下圖所示,p++之后指向a后面的內(nèi)存,r++相當(dāng)于a++。

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

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

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

使用引用的意義和作用:

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

1.  引用作為函數(shù)的參數(shù),其作用與指針作為函數(shù)參數(shù)相似,函數(shù)對(duì)形參的操作,等于對(duì)實(shí)參本身進(jìn)行操作;

2.  函數(shù)調(diào)用時(shí),系統(tǒng)采用值傳遞的方式將實(shí)參的值傳遞給形參,系統(tǒng)會(huì)在內(nèi)存中開辟空間來存儲(chǔ)形參變量,并將實(shí)參的值復(fù)制給形參, 而采用引用作為函數(shù)形參,只要傳給函數(shù)實(shí)參的別名,不需要耗費(fèi)時(shí)間在內(nèi)存中開辟空間存儲(chǔ)形參,使用引用,可以提高函數(shù)的時(shí)間效率,并節(jié)省內(nèi)存空間。

3. C++中推薦使用引用而非指針作為函數(shù)的參數(shù),指針作為函數(shù)形參變量時(shí),調(diào)用函數(shù)時(shí)仍需要在內(nèi)存中分配空間。

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

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

當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)果:
交換前,a 的值: 100
交換前,b 的值: 200
交換后,a 的值: 200
交換后,b 的值: 100

指針的意義和作用:

指針是一個(gè)變量,其值為另一個(gè)變量的地址,即,內(nèi)存位置的直接地址。就像其他變量或常量一樣,您必須在使用指針存儲(chǔ)其他變量地址之前,對(duì)其進(jìn)行聲明。

暫時(shí)就這么多吧!

聲明:本內(nèi)容為作者獨(dú)立觀點(diǎn),不代表電子星球立場。未經(jīng)允許不得轉(zhuǎn)載。授權(quán)事宜與稿件投訴,請(qǐng)聯(lián)系:editor@netbroad.com
覺得內(nèi)容不錯(cuò)的朋友,別忘了一鍵三連哦!
贊 1
收藏 2
關(guān)注 19
成為作者 賺取收益
全部留言
0/200
成為第一個(gè)和作者交流的人吧