C語言之常指標
今天首先學習了const變數定義的方式(兩種):
第一種定義方式:const 在型別的前面,例如:
const int var=100;
第二種定義方式:const 在型別的後面,例如:
int const var1=999;
注:這兩種定義方式沒有什麼區別。
1、const變數在定義的時候進行初始化;
2、當一個變數被宣告為const變數時,意味著該變數是一個常量,不可被修改;
3、該變數只能做右值,不能做左值;
然後我們學習了,const指標,也叫做常指標。
1、常指標在宣告的時候進行初始化;
2、指標不能再指向別的變數,指標的value不了被修改。
3、可以通過指標來修改變數的值。
常指標:例如:int * const pp=NULL;
指向常量的指標:
int x = 123;
const int *pc = &x;
1、指向常量的指標,該指標可以指向別的變數,指標的value可以更改。
2、指向常量的指標、不能賦值給一個普通的指標
接下來我們做了一些練習(如下):
const int x=2,y=3; //定義基本型別的const變數
int z=3; //定義一個非const 變數
const int *pc=&x; //指向常量的指標
int *const cp = &z; //常指標,指標不能再指向別的變數
int *pp = &z; //定義一個非const指標pp 把z的地址給了指標
z=y; // 對 const 變數只能做右值,不能做左值
x = y; // 錯 x是const變數,所以x的值不可更改
pc=&z; // 對 指向常量的指標,不能通過指標去修改指標所指向
//的記憶體空間的值,但是,指標可以指向別的變數。
*pc=10; //錯 指向常量的指標,不能通過指標去修改指標所指向
//的記憶體空間的值
*pc=y; //同上
*pc = 5; //同上
pc=pp; // 對 指向常量的指標可以改變指向的地址
//pc是一個指向常量的指標,pp是一個普通的指標。
//pp是一個普通的指標。用一個普通的指標給一個常量的指標賦值是可以的。
pp = pc; /*對
用一個指向常量的指標,賦值給一個普通的指標,不可以,
如果可以,那麼就可以通過普通的指標去修改記憶體的值
*/
z = 5; //對 變數可以改變值,給一個非const賦值是可以的。
z = x; //對 const只能做右值,用一個const的變數給一個非const變數賦值可以。
*cp = x; //錯 通過常指標改變指標所指向變數的值,原則上來講是可以的,
//如果只想的變數是const的,那麼不停編譯會有不同的結果。
cp=&x; //錯 cp是常指標不能改變指標自身的值。給常指標賦值是錯誤的。
//兩種觀點
pp = &x; //原則上是可以的,pp為普通的指標,可以通過這種方式給pp賦值。
//錯,通過指標去修改變數的值,而不管該變數是否為const,
//x是const常量,不能被改變。
pp = pc; //錯 普通的指標可以改變它指向的地址的值,指向常量的指標不可以改變它指向地址的值
//錯指向常量的指標不能賦值給一個普通的指標
pp = cp; //對 cp指向的是一個變數的地址,pp是一個不同的指標,可以把cp的值給pp
//常指標可以賦值給一個普通的指標
const int * const pp = &a; //記憶體空間和值都不能被改變