天天看點

C++快速筆記 7 指針7. 指針

7. 指針

7.1 指針的概念

通過指針通路記憶體。

7.2 指針變量的定義和使用

資料類型 * 變量名;

e:

int a = 10;
int * p;
p = &a; //p指向變量a的位址

// 使用指針通路記憶體
cout <<"*p=" << *p << endl;
           

7.3 指針所占記憶體空間

指針存儲的是記憶體位址。

是以,如果計算機是64位的(用64位表示記憶體),指針的大小就是64位(8個位元組)

可以用sizeof檢視。

7.4 空指針和野指針

空指針: 指向記憶體0的指針。一般用于初始化。

int *p = NULL;

這個位置是系統保護的,使用者無法讀寫。

如果試圖寫入資料,如

*p=1

。會引起錯誤。

野指針:指向不确定的記憶體。

const 修飾指針

  1. 常量的指針

    const int * p = &a

    指針p指向一個常量a,不能用p修改a。
int a = 10;
int b = 10;
const int * p1 = &a;
p1 = &b; //正确
*p1 = 100; // 報錯 
           
  1. 指向不變的指針
int * const p2 = &a;
p2 = &b // 錯誤
           

p2指向a後不能在指向其它位置。

  1. 兩個都不能改
const int * const p3 = &a;
           

這個很好記,看const離誰近,

離int近,就是這個int是常量,

裡p近,就是p是常量。

7.6 指針和數組

用指針通路數組。

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++;
}
           

7.7 指針和函數

int swap2(int * p1, int * p2)
{
    int temp = *p1;
    *p1 = *p2;
    *p2 = temp;
}
           

7.8 指針、數組、函數

void bubble_sort(int * arr, int len)//int * arr 也可以寫為 int arr[]
{
    for (int i=0; i < len-1; i++) {
        for (int j=0; j < len -1 -i; j++){
            if arr[j] > arr[j+1] {
                swap2(&arr[j], &arr[j+1])
            }

        }
    }
}
           

繼續閱讀