程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> const常量、常量指針、指針常量

const常量、常量指針、指針常量

編輯:關於C語言
 

1)先看const常量的情況:
const int a = 2; //推薦用法
int const b = c; // c是已經聲明過的整型
兩者等價。本地的const常量必須在第一次聲明時就初始化,用變量或常量初始化都可以,只是初始化一次以後它的值就不能再改變了,此所謂const的含義。

2)接著看常量指針的情況:
const int *pa; //推薦用法
int const *pa;
兩者也等價。常量指針具有性質:“不能通過引用改變它指向的對象的值”,以此保證它所指向的常量的常量性:
*pa = d; // 不可行(d是已經聲明過的整型)
但指針本身的值是可變的:
pa = &d; // 可行(d是已經聲明過的整型)
而且常量指針也可以指向變量,如下:
int t,u;
const int *pa;
pa = &t; //可行,指向變量t
pa = &u; //也可行,指向變量u
我們可以把常量指針理解成:“為了指向常量而發明的指針”,這樣比較貼切。

3)然後看指針常量的情況:
int *const pa = &n; // n是之前已經聲明過的整型變量,注意必須是變量,理由見下:
“指針常量”即指針本身的值是常量,但“能通過引用改變它指向的對象的值”,如下:
pa = &d; // 不可行(d是已經聲明過的整型)
*pa = d; // 可行(d是已經聲明過的整型)
因為指針常量也是一種const常量,所以它同樣必須在第一次聲明時就初始化,不過它的初始值縮小為只能是變量(的地址),因為只有變量才能確保以後“能通過引用而改變它指向的對象的值”。
也就是說,指針常量反而總是指向變量的。

4)最後,看前面兩者的結合:指向常量的指針常量
const int *const c = &e; //e是已經聲明過的整型,整型常量或整型變量都可以
把它理解成一個普通的const常量,同時被剝奪了“通過引用改變它指向的對象的值”的性質。

5)關於記憶技巧:
對於區分const int *pa和int *const pa這兩者,
前者中,const直接修飾*(不考慮int,因為類型在這裡是沒影響的),說明*(引用)這種行為具有常量性,即“不能通過引用改變它指向的對象的值”,即指向常量的指針。
後者中,const直接修飾pa,說明pa本身的值具有常量性,即指針常量。
或者也可以這樣來記憶:
const int a = n; // const常量
const int *a; //常量指針
int *const a = &n; //指針常量

 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved