一、基礎概念
&是一種一元運算符,用於得到一個對象的內存地址。在C和C++中,變數都有一個唯一的地址,其中包含變數的值和類型信息。&運算符返回的值是一個指向該地址的指針。
int a = 10; int* p = &a; //將指針p指向a的地址
可以使用sizeof操作符來獲取一個變數佔用的內存大小,可以使用&運算符和指針來修改或訪問一個變數的值。
二、指針與引用
在C++中,使用指針和引用都可以訪問和修改變數的值。
指針是一個指向其他對象的對象,它可以被賦值為另一個指針或者NULL,也可以通過指針訪問或者修改它所指向的對象。使用指針需要注意空指針的問題。
int a = 10; int* p = &a; int* q = nullptr; if(p != nullptr){ *p = 20; } if(q == nullptr){ std::cout << "q is a null pointer." << std::endl; }
引用是一個對象的別名,它可以被賦值為另一個引用或對象,也可以通過引用訪問或者修改它所指向的對象。引用在定義時必須進行初始化,且引用在初始化後不能再改變其值。使用引用需要注意避免空引用和野指針。
int a = 10; int& r = a; r = 20; std::cout << a << std::endl; //輸出20
三、函數參數中的&
在函數參數中使用&時,表示該參數是一個引用類型,它可以直接修改函數外部的變數的值。
void addOne(int& n){ n += 1; } int a = 10; addOne(a); std::cout << a << std::endl; //輸出11
當在函數參數中使用const關鍵字與&符號一起使用時,表示該參數是一個常量引用,它可以參與到函數的計算過程中,但是不能被改變。
void print(const int& n){ std::cout << n << std::endl; } int a = 10; print(a); const int b = 20; print(b);
四、數組與指針
指針可以用來存儲數組的地址,也可以通過指針來訪問和修改數組元素的值。
int a[5] = {1, 2, 3, 4, 5}; int* p = a; for(int i = 0; i < 5; i++){ std::cout << *(p + i) << std::endl; }
C++14中引入了一個新特性,即使用&運算符來獲取數組的地址,因此在C++14及以後的版本中,可以直接使用&a來獲取數組的地址。
int a[5] = {1, 2, 3, 4, 5}; int* p = a; //等價於 int* p = &a[0]; for(int i = 0; i < 5; i++){ std::cout << *(p + i) << std::endl; }
五、結構體與類
結構體和類是C++中自定義類型的兩種方式,也可以使用指針來訪問和修改它們的成員變數。
struct Student{ std::string name; int age; }; Student s = {"Tom", 20}; Student* p = &s; p->name = "Jerry"; p->age = 21; std::cout << s.name << ", " << s.age << std::endl; //輸出Jerry, 21
六、總結
&運算符可以用於獲取一個對象的內存地址,包括基本類型、數組、結構體和類等自定義類型。在C++中,指針和引用都可以用來修改變數的值,但是需要注意空指針、空引用和野指針的問題。在函數參數中使用&時,可以直接修改函數外部的變數的值。在訪問數組時,可以使用&a來獲取數組的地址,並使用指針來訪問和修改數組元素的值。結構體和類也可以使用指針來訪問和修改它們的成員變數。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/289198.html