指針和引用 當我們需要在程式中傳遞變數的地址時,可以使用指針或引用。它們都可以用來間接訪問變數,但它們之間有一些重要的區別。 指針是一個變數,它存儲另一個變數的地址。通過指針,我們可以訪問存儲在該地址中的變數。指針可以被重新分配,可以指向不同的變數,也可以為NULL。指針使用*運算符來訪問存儲在地址 ...
指針和引用
當我們需要在程式中傳遞變數的地址時,可以使用指針或引用。它們都可以用來間接訪問變數,但它們之間有一些重要的區別。
指針是一個變數,它存儲另一個變數的地址。通過指針,我們可以訪問存儲在該地址中的變數。指針可以被重新分配,可以指向不同的變數,也可以為NULL。指針使用*運算符來訪問存儲在地址中的值。
引用是一個別名,它為一個已經存在的變數提供了另一個名稱。引用不能被重新分配,一旦引用被初始化,它將一直引用同一個變數。引用使用&運算符來聲明和訪問。
下麵是一個簡單的例子,演示了指針和引用的區別:
#include "stdafx.h"
#include <iostream>
using namespace std;
//引用和指針的例子
int run_ref_point() {
int x = 10;
int* ptr = &x; // 指針
int& ref = x; // 引用
cout << "x = " << x << endl;//10
cout << "*ptr = " << *ptr << endl;//10
cout << "ref = " << ref << endl;//10
*ptr = 20;
cout << "x = " << x << endl;//20
cout << "*ptr = " << *ptr << endl;//20
cout << "ref = " << ref << endl;//20
ref = 30;
cout << "x = " << x << endl;//30
cout << "*ptr = " << *ptr << endl;//30
cout << "ref = " << ref << endl;//30
return 0;
}
在這個例子中,我們聲明瞭一個整數變數x,並使用指針和引用來訪問它。我們可以看到,指針和引用都可以用來訪問變數的值,但是指針可以被重新分配,而引用不能
修改變數的值
當我們需要在函數中修改變數的值時,可以使用指針或引用。下麵是一個例子,演示瞭如何使用指針和引用來交換兩個變數的值:
#include <iostream>
using namespace std;
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
void swap(int &a, int &b) {
int temp = a;
a = b;
b = temp;
}
int main() {
int x = 10, y = 20;
// 使用指針交換變數的值
swap(&x, &y);
cout << "x = " << x << ", y = " << y << endl;//x = 20, y = 10
// 使用引用交換變數的值
swap(x, y);
cout << "x = " << x << ", y = " << y << endl;//x = 10, y = 20
return 0;
}
使用指針來交換變數的值需要傳遞變數的地址,而使用引用來交換變數的值則不需要。另外,使用引用來交換變數的值更加簡潔和直觀,因為它不需要使用*運算符來訪問變數的值。
前面加&變成指針類型
為什麼在一個int類型的變數前加&就變成了指針?舉個例子
void swap(int* a, int* b) {
int temp = *a;
*a = *b;
*b = temp;
}
int run_ref_point2() {
int x = 10, y = 20;
// 使用指針交換變數的值
swap(&x, &y);
}
在C++中,&符號有兩種含義:
-
取地址符:&符號可以用來獲取一個變數的地址,例如int a = 10; int *p = &a;,這裡的&符號就是取地址符,用來獲取變數a的地址。
-
引用符:&符號還可以用來定義引用類型,例如int a = 10; int &b = a;,這裡的&符號就是引用符,用來定義一個名為b的引用,它引用了變數a。
當我們在一個int類型的變數前加&時,它的含義是取地址符,表示獲取該變數的地址。例如:
int a = 10;
int *p = &a; // 獲取變數a的地址,並將其賦值給指針p
這裡的&符號就是取地址符,用來獲取變數a的地址。
如果我們想要定義一個引用,應該這樣寫:
int a = 10;
int &b = a; // 定義一個引用b,它引用了變數a
這裡的&符號就是引用符,用來定義一個名為b的引用,它引用了變數a。