如何聲明和使用指針?類型后加星號定義指針變量

指針c++/c++中通過“類型后加星號”聲明,需初始化后使用,通過解引用操作訪問或修改指向的值,多級指針用于函數中修改指針本身。1. 聲明指針變量時,如int *p;,星號表示指針類型,注意int *a, b;僅a是指針;2. 初始化指針必須指向有效地址,如int *p = #或動態分配內存;3. 使用*p解引用訪問或修改值,避免對未初始化或已釋放的內存操作;4. 多級指針如int **p可用于函數參數傳遞,改變指針本身的指向,需注意指針級數與解引用次數匹配。

如何聲明和使用指針?類型后加星號定義指針變量

在 C 或 C++ 中,指針是一個非常基礎但也非常強大的概念。聲明和使用指針的關鍵在于理解“類型后加星號”這個方式的含義,并正確地進行操作。

如何聲明和使用指針?類型后加星號定義指針變量


指針變量的聲明:類型 + 星號 + 變量名

聲明指針變量時,基本格式是這樣的:

如何聲明和使用指針?類型后加星號定義指針變量

數據類型 *指針變量名;

比如:

int *p; float *q; char *r;

這里 int* p; 表示 p 是一個指向 int 類型變量的指針。注意的是,這里的星號(*)表示這是一個指針類型,而不是普通的變量。

如何聲明和使用指針?類型后加星號定義指針變量

常見誤區是以為 int* a, b; 會讓 a 和 b 都是指針,其實只有 a 是指針,b 還是一個普通 int 變量。為了避免混淆,有些人更喜歡寫成 int *a, *b;。


指針的初始化和賦值:讓它指向一個有效地址

聲明完指針之后,不能直接使用,必須讓它指向一個有效的內存地址,否則就是“野指針”,容易引發程序崩潰。

可以這樣初始化指針:

int num = 10; int *p = # // 把 num 的地址賦給指針 p

也可以讓指針指向一個數組或動態分配的內存,例如:

int arr[5] = {1, 2, 3, 4, 5}; int *p = arr; // 數組名 arr 就是首元素的地址

或者用 malloc 動態分配內存:

int *p = (int *)malloc(sizeof(int)); *p = 20; // 給分配的內存賦值 free(p); // 使用完記得釋放

使用指針訪問和修改值:通過解引用操作符 *

有了指向某個變量的指針之后,就可以通過“解引用”來訪問或修改該變量的值:

int num = 30; int *p = #  printf("%dn", *p); // 輸出 30 *p = 40;            // 修改 num 的值為 40
  • *p 表示訪問指針指向的內存中的值。
  • 如果你只是輸出 p,那得到的是地址(即 num 的內存位置)。

需要注意的是:

  • 不要對未初始化的指針進行解引用。
  • 不要訪問已經被釋放的內存空間。

多級指針與函數參數傳遞:靈活但容易繞暈

有時候你會看到像 int **p 這樣的寫法,這叫二級指針,常用于函數中修改指針本身的內容。

舉個例子:

void changePointer(int **p) {     int num = 100;     *p = # }  int main() {     int *ptr = NULL;     changePointer(&ptr); }

在這個例子里,我們傳入了指針的地址,函數內部修改了 ptr 的指向。這種方式在處理動態內存、鏈表等結構時非常常見。

不過要注意:

  • 一級指針和二級指針之間不能隨便混用。
  • 解引用的次數要和指針的級數匹配。

基本上就這些。指針看似簡單,但細節很多,稍有不慎就會出錯。掌握好“類型后加星號”的定義方式,再結合取地址和解引用的操作,就能開始真正用上指針的力量了。

? 版權聲明
THE END
喜歡就支持一下吧
點贊6 分享