C++之指針與常量


該文爲中國大學MOOC上北京郵電大學崔毅東和楊談老師主講的《C++程序設計(面向對象進階)》筆記整理

1. const

常量是程序中一塊數據,這個數據一旦聲明後就不能被修改

代碼示例:

const datatype CONSTANTNAME = VALUE;
或
datatype const CONSTANTNAME = VALUE;

常量分爲命名常量和字面常量,如 const int A = 12; 其中 A 是這塊數據的名字,稱爲命名常量,其中 12 能從字面上就看出它的值,稱爲字面常量

2. 指針

指針是一個地址,類似 0x8FFF 這樣。而地址,就是某個內存位置的編號。該位置的地址可以存放數據,這些數據被稱爲"指針所指的數據"或"指針指向的數據"

代碼示例:

int* x;  // 定義 int 型指針
int y = 2; 
x = &y;  // &y 取到 y 的地址,賦值給 x
std::cout << *x << std::endl;  // *x 訪問指針指向數據的值

3. 常量和指針

指針本身具有兩個屬性:

  • 指針本身
  • 指針所指向的數據

指針所指向的數據可以是常量,也可以是變量;指針可以是常量,也可以是變量,即:

  • 當指針所指向的數據爲變量,指針也是變量時,稱爲"指針變量"

    int x = 5;
    int* y = &x;
    int z = 3;
    *y = 20;  // *y 可以改變 x 的值
    y = &z; // y 也可以指向其他地址
    
  • 當指針所指向的數據爲常量,指針是變量時,稱爲"常指針"

    const int x = 5;
    const int* y = &x;  // const 意思是此指針指向的數據爲常量
    int z = 10;
    *y = 20;   // error,因爲指針指向的數據爲常量
    y = &z;   // y 可以指向其他地址
    
  • 當指針所指向的數據爲變量,指針是常量時,稱爲"指針常量"

    int x = 5;
    int* const y = &x; 
    int z = 10;
    *y = 20;   // *y 可以改變 x 的值
    y = &z;   // error,y 爲常量,不可以指向其他值
    
  • 當指針所指向的數據爲常量,指針是常量時,稱爲"常指針常量"

    const int x = 5;
    // 前一個 const 指明此指針指向的數據爲常量,後一個 const 指明此指針爲常量
    const int* const y = &x;
    int z = 10;
    *y = 20;  // error,*y 指向的 x 爲常量
    y = &z;   // error,y 爲常量
    

4. 指針的內存佈局

代碼:

const int a = 5;
int b = 9;
const int* pa = &a;
int* const pb = &b;

指針的內存佈局:

在這裏插入圖片描述

5. 總結

  • *(指針)和 const(常量)誰在前先讀誰
  • * 代表被指的數據,名字代表指針地址
  • const 在誰前面就不允許誰改變,例如 const int * x; const 在 * 前面,即指針指向的數不能被修改;而 int * const y; const 在 y 前面,即指針的指向不能被修改
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章