c語言中,指標是最難理解的一部分,尤其是const指標變數。
#include "stdafx.h"
int main(int argc, char* argv)
{ //定義基本型別的const變數,const 位置在哪兒都可以
const int x = 2,y = 3; //兩個常量
//定義乙個非const變數
int z = 3; //乙個普通變數
//定義乙個指向常的指標
const int* pc = &x; //指向常量的指標
//定義乙個常指標
int* const cp = &z; //常指標
//定義乙個非const指標
int* pp = &z; //int 型指標
// x = y; //x 為const變數,所以x的值不可以被更改 只能做右值
pc = &z; //可以,pc是乙個指向常量的指標,不能通過該指標去修改指標所指向的記憶體空間的值,但是,該指標可以指向別的變數
// *pc = 10; //不可以,*pc所指向的位址為const變數,其值不可更改 pc是乙個指向常量的指標,不能通過該指標去修改指標所指向的記憶體空間的值
// *pc = y; //不可以,同上
// *pc = 5; //同上
pc = pp; //可以,pc為指標,其值可被改變 pc是乙個指向常量的指標,pp是乙個普通指標,用乙個普通指標給乙個指向常量的指標賦值是可以的
// pp = pc; //用乙個指向常量的指標,賦值給乙個普通指標,不可以。如果可以,那麼就可以通過普通的指標去修改記憶體的值
z = 5; //可以,給乙個非const變數賦值是可以的
z = x; //可以,用乙個const的變數給乙個非const變數賦值是可以的
*cp = x; //可以,通過常指標去修改指標所指向變數的值,原則上來講是可以的,如果指向的變數是const的,那麼不同編譯器會有不同的結果
// cp = &x; //不可以,cp為常指標,指標的值不能被修改,給常指標賦值是錯誤的
// pp = &x; //不可以,pp是非const指標,原則上來講給它賦值是可以的,在不同的編譯器下有不同的結果
// pp = pc; //不可以,指向常量的指標不能賦值給乙個普通的指標
pp = cp; //可以,常指標可以賦值給乙個普通指標
const int * const pp = &a; //雙const 既保護指標又保護記憶體變數
printf("hello world!\n");
return 0;
C語言之常指標
今天首先學習了const變數定義的方式 兩種 第一種定義方式 const 在型別的前面,例如 const int var 100 第二種定義方式 const 在型別的後面,例如 int const var1 999 注 這兩種定義方式沒有什麼區別。1 const變數在定義的時候進行初始化 2 當乙個...
C語言中const與指標的指標
主題源自 c專家程式設計 第19頁,以下是我的理解。先看個例子 include 例子1 void foo1 const char p int main void 這個簡單的程式在編譯的時候會報個error或warning,原因是原型不匹配。為什麼這樣?我們在像下面例子2這樣使用時明明一點問題都沒有。...
c語言中const 型別變數位址賦值給指標。
const在c語言中是表示道義上保證變數的值不會被修改,並不能實際阻止修改,通過指標可以修改常變數的值,但是會出現一些不可知的結果。幾種情況不同,我們乙個乙個來看。1 直接賦值 const inta 3 a 5 const.c 6 2 error assignment of read only va...