C語言中Const指標變數(常指標)

2021-06-04 16:28:46 字數 1287 閱讀 6329

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...