const

--------siwuxie095 ios

   

   

   

   

控制變化的 const: 函數

   

1、const 與基本數據類型 spa

   

2、const 與指針類型 3d

   

3、const 與引用 指針

   

   

   

   

   

const 與基本數據類型: blog

   

先看沒有 const 以前:定義一個 x,及其內存表示 內存

   

   

當加上 const 後:由 變量 變成了 常量,x 就沒法再獲得更改, 編譯器

若是再給 x 賦值 5,就會報錯,沒法經過編譯 it

   

   

   

   

   

   

   

   

   

const 與指針類型: io

   

const 與指針類型的關係 比 const 與普通數據類型的關係要複雜

   

先看與一重指針的相關狀況:

   

const 能夠放在數據類型的前面,也能夠放在數據類型的後面

兩者徹底等價

   

   

   

但將 const 寫在 * 後面,又有所不一樣

   

   

const 除了 加一處 以外,也能夠 兩處都加

   

   

   

   

   

如:

   

定義 x,賦值 3,const int *p 指向 x 後,若是 p 再去指向

另外一個地址 &y,是能夠的。由於 const 此時修飾的是 *p,

若是經過 *p 進行從新賦值,是錯誤的

   

   

   

   

再如:

   

此時 const 寫在 * 後,就意味着 const 所修飾的 p 就只能

指向一個地址,不能再進行變化。若是使用 p 再去指向 y

的地址 &y,編譯器將提示錯誤

   

   

   

   

   

再如:

   

若是在一個指針的先後,都使用了 const,就意味着當使用 p

指向 x 以後,就不能再經過 p 來修改 x 自己的值,也不能將 p

指向其餘的變量

   

   

   

   

   

   

   

const 與引用:

   

如:

   

定義 x,賦值 3,const 定義一個引用 &y,y 是 x 的別名

   

若是給 x 賦值 10,是正確的,由於 x 是可變的

   

若是給 y 賦值 20,是有問題的,由於 y 做爲 x 的別名,

前面加了修飾符 const,因此經過 y 來修改是有問題的,

但經過 x 做修改是容許的

   

   

   

   

   

   

const 示例,如下都會報錯:

   

   

   

   

   

   

   

const 示例,對比:

   

   

第一個是有問題的,x 是不可變的,而指針 y 倒是可變的,

若是定義一個可變的指針去指向一個不可變的變量,就意味

着有風險,即 能夠經過 *y 的方式,來改變 x 的值,這對計

算機來講風險太大,編譯器是禁止的

   

而第二個則沒問題,x 可變,而指針 y 所指向的位置不可變,

x 自己具備 讀 和 寫 兩種權限,而指針 y 只具備 讀 權限,就

意味着用一個權限小的來接收一個權限大的變量,是容許的

   

   

   

   

程序:

   

#include <stdlib.h>

#include<iostream>

using namespace std;

   

   

int main(void)

{

//假如定義了一個const int x=3;

//其實至關於宏定義 #define X 3 (宏定義方式定義常量)

int x = 3;

int y = 5;

const int *p = &x;//等價於 const int *p=&x;

cout << *p << endl;

x = 10;//此時指針p不能夠賦值 *p=10; 是錯誤的

cout << *p << endl;

p = &y;//但卻能夠指向其餘變量

cout << *p << endl;

system("pause");

return 0;

}

   

   

//int main(void)

//{

// int x = 3;

// int y = 5;

// int *const p = &x;

// *p = 10;//此時指針p能夠賦值 但卻不能夠指向其餘變量 p=&y; 是錯誤的

// cout << *p << endl;

// system("pause");

// return 0;

//}

   

//int main(void)

//{

// int x = 3;

// int y = 5;

// //此時指針p既不能賦值(如 *p=10; 也不能指向其餘變量(如 p=&y;

// cout << *p << endl;

// const int *const p = &x;

// system("pause");

// return 0;

//}

   

//const與引用

//int main(void)

//{

// int x = 3;

// int y = 5;

// const int &z = x;//等價於 int const &z=x;

// x = 10;//此時不能給引用z賦值 z=10; 是錯誤的

// cout << z << endl;

//}

   

//函數中的const

//void fun(const int &a, const int &y);

//int main(void)

//{

// int x = 3;

// int y = 5;

// fun(x, y);

// cout << x << "," << y << endl;

// system("pause");

// return 0;

//}

//

//保證了傳入函數內部的變量不會因爲函數的誤操做而改變變量的值 下面的即爲誤操做

//void fun(const int &a, const int &y)

//{

// /*a = 10;

// b = 20;*/

//}

   

   

vs2013中:

   

   

   

   

   

   

   

   

   

   

   

   

【made by siwuxie095】

相關文章
相關標籤/搜索