C++指針 定義指針 使用指針 指針所佔內存空間 空指針和野指針 const修飾指針 指針和數組 指針和函數

一言以蔽之: 指針能間接的訪問變量的內存,進行讀和寫的操作。

定義指針

數據類型 * 指針變量名

int a = 0;
int * p; //定義指針
p = &a; //指針記錄變量a的地址

使用指針

可以通過解引用的方式來找到指針指向的內容
指針前加 * 代表解引用,找到指針指向的內存中的數據

*p = 1000; //這段代碼會把 a 變量裏的值也修改
cout << *p << endl;//訪問a的數據

指針所佔內存空間

32位操作系統:佔4個字節空間
64位操作系統:佔8個字節空間

cout << sizeof(int *) << endl;

空指針和野指針

空指針和野指針都不是我們申請的空間,因此不能訪問

空指針

定義:指針變量指向內存中編號爲0的空間。
用途:初始化指針變量。
注意:空指針指向的內存是不可以訪問的。
0~255之間的內存編號是系統佔用的,因此不可訪問

int * p = NULL;
*p = 100;//空指針不可訪問, nullptr

野指針

定義:指針變量指向非法的內存空間
內存地址沒有申請是不可以訪問的!!!

int * p = (int *)0x1100;
cout << *p << endl;

const修飾指針

const修飾指針有三種情況:
1,const修飾指針——常量指針
2,const修飾常量——指針常量
3,const既修飾指針,又修飾常量

1,常量指針(const int * p = &a)

指針的指向可以修改,但是指針指向的值不可以修改

int a = 10;
int b = 20;
const int * p = &a;
*p = 20;//錯誤,指針的值不可以改
p = &b;//正確,指針指向可以改

2,指針常量(int * const p = &a)

值可以改,但是指向不可以改

int a = 10;
int b = 20;
const int * p = &a;
*p = 20;//正確,指針的值可以改
p = &b;//錯誤,指針的指向不可以改

3,const既修飾指針,又修飾常量

指針的指向和值都不可以修改

int a = 10;
int b = 20;
const int * p = &a;
*p = 20;//錯誤,指針的值不可以改
p = &b;//錯誤,指針的指向不可以改

指針和數組

指針在數組中利用+1可以進行偏移。

int arr[] = {1,2,3,4,5,6,7,8,9,10};
int * p = arr;
for (int i = 0; i<10; i++) {
    cout << *p << endl;
    *p++;
}

指針和函數

利用指針可以做地址傳遞

void swap(int * a,int * b){
  int temp = *a;
  int *a = *b;
  int *b = temp;
}
int a = 10;
int b = 20;
swap(&a,&b);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章