C++之“偏正短语”
const int MONTH = 12 與 int const MONTH = 12 const在類型前或者類型后無區別(不可修改)
1):指針常量 與 常量指針
一) 常量指針。
指針指向的對象是常量,那么這個對象不能被更改。
1)const int *p;
2)int const *p;
int a = 5;
const int b = 8;
const int *c = &a; // 這是合法的,非法的是對c的使用
*c = 6; // 非法,但可以這樣修改c指向的對象的值:a = 6;
const int *d = &b; // b是常量,d可以指向b,d被賦值為b的地址是合法的
細心的朋友在使用字符串處理函數的時候,應該會注意到這些函數的聲明。它們的參數一般聲明為常量指針。例如,字符串比較函數的聲明是這樣的:
int strcmp(const char *str1, const char *str2);
char *str1, *str2;
str1 = "abcde1234";
str2 = "bcde";
{
printf("str1 equals str2.");
str1和str2的內容顯然是可以更改的,例如可以使用“str1[0] = x;”這樣的語句把str1的內容由“abcde1234”變為“xbcde1234”。因為函數的參數聲明用了常量指針的形式,就保證了在函數內部,那 個常量不被更改。也就是說,對str1和str2的內容更改的操作在函數內部是不被允許的。(就目前的應用來看,我覺得設置常量指針就是為函數參數聲明準 備的,不然還真不知道用在什么地方呢,呵呵!)
const int a = 12;
const int b = 15;
const int *c = &a; // 為了簡化代碼,很多人習慣賦初始值
const int *d;
d = &a; // 這樣當然是可以的
c = &b; // 雖然c已經被賦予初始值,可是仍然可以指向另一個變量
可以這么想,*左側是常量,指針指向的對象是常量。
指針是形容詞,常量是名詞。這回是以常量為中心的一個偏正結構短語。那么,指針常量的本質是一個常量,而用指針修飾它,那么說明這個常量的值應該是一個指針。
在C/C++中,指針常量這樣聲明:
int a;
int *const b = &a; //const放在指針聲明操作符的右側
因為指針常量是一個常量,在聲明的時候一定要給它賦初始值。一旦賦值,以后這個常量再也不能指向別的地址。
因此,有這么段程序:
char *a = "abcde1234";
char *b = "bcde";
char *const c = &a;
下面的操作是可以的。
a[0] = 'x'; // 我們并沒有限制a為常量指針(指向常量的指針)
*c[0] = 'x' // 與上面的操作一致
三)指向常量的指針常量
因為是一個指針常量,那么它指向的對象當然是一個指針對象,而它又指向常量,說明它指向的對象不能變化。
const int a = 25;
const int * const b = &a;
我編了這樣的口訣,記住,應該不難:
const(*號)右邊放,我是指針常量指向變量;
指針變量能改指向,指針常量不能轉向!
要是全都變成常量,鎖死了,我不能轉向,你也甭想變樣!
2) 指針數組 與 數組指針
int *a[10] :指針數組 ---> 保存指針的數組(一個數組,數組元素為指針)
int (*a)[10]:數組指針 ---> 指向數組的指針(一個指針,指向的類型為數組)
3) 函數指針 和 指針函數
一)函數指針:
類型說明符 (*func)();
int (*p)() ---> p 是一個指向函數入口的指針變量
二)指針函數:
類型說明符 *func ()
int *P() ----->返回一個指針指向整形
總結
以上是生活随笔為你收集整理的C++之“偏正短语”的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux md5sum 的用法
- 下一篇: 搞清axis的含义,这一篇就够了!