c 中的const與指標

2021-06-01 21:53:06 字數 1566 閱讀 8588

在c/c++中,指標本身就是乙個難點,再加與const的結合,常會產生許多讓人費解的地方,在這裡做個小結。

1.定義const物件

const int buffsize=512;

因為常量定義後就不能修改,所以定義時必須初始化.

const i,j=0; //error,i沒有初始化

2.const物件預設為檔案的區域性變數

extern const int bufsize=512; //定義並初始化

extern const int bufsize;  //宣告

for(int index=0;index!=bufsize;++index)

非const變數預設為extern,要使const變數能夠在其它的檔案中訪問,必有顯示指定為extern.

3.指向const物件的指標

const int *p;

這個p是乙個指向int型別const物件的指標,const限定了指標p所指向的型別,而並非p本身。也就是說p

本身並不是const。在定義時不需要對它進行初始化,還可以給p重新賦值,使其指向另乙個const物件。

但不能通過p修改所指向物件的值。

示例1:int a=0; p=&a;  可以。

示例2:*p=20;  不可以。

結論:這種指向const物件的指標只是限制不能修改p指向物件的數值,而不是限制p指向什麼物件。

把乙個const物件的位址賦給乙個不是指向const物件的指標也是不行的。

示例3:const int b=10;

int *p2=&b;   //error

const int *p3=&b; //ok

結論:因為變數b有const修飾,不能被修改。但指標p2是乙個普通的指標,可以修改指向物件的值,兩種

宣告矛盾,所以不合法。而指向const物件的指標不允許修改指標指向物件的數值,所以這種方式合法。

不能使用void*指標儲存const物件的位址,而必須使用const void*型別儲存const物件的位址。

const int a=6;

void *p=&a;//error

const *cp=&a;//ok 

int const *p;

c++規定,const關鍵字放在型別或變數名之前是等價的.

const int n=5;    //same as below

int const m=10;

const int *p;    //same as below  const (int) * p

int const *q;    // (int) const *p

4.const指標

int c=20;

int *const p4=&c;

指標p4稱為const指標。它和指向const物件的指標恰好相反,它不能夠修改所指向物件,但卻能夠修改指

向物件的數值。另外,這種指標在宣告時必須初始化。

5.指向const物件的const指標

const int d=30;

const int *const dp=&d;

指標dp既不能修改指向的物件,也不能修改只想物件的值。 

c 中 const與指標

const與指標這塊自己一直理解的朦朦朧朧的,今天在vs上專門做個一些測試,特此記錄。const與指標一般有兩種情況 一是修飾指標指向的物件,二是用const修飾指標.如 int age 23 const int pt age int age 23 const int pt age int sage...

c 中的const與指標

原文 c c 中,指標本身就是乙個難點,再加與const的結合,常會產生許多讓人費解的地方,在這裡做個小結。1.定義const物件 const int buffsize 512 因為常量定義後就不能修改,所以定義時必須初始化.const i,j 0 error,i沒有初始化 2.const物件預設為...

C 中的const與指標

在c c 中,指標本身就是乙個難點,再加與const的結合,常會產生許多讓人費解的地方,在這裡做個小結。1.定義const物件 const int buffsize 512 因為常量定義後就不能修改,所以定義時必須初始化.const i,j 0 error,i沒有初始化 2.const物件預設為檔案...