const int、const int *、int *cosnt、const int * const、const int 的区别
生活随笔
收集整理的這篇文章主要介紹了
const int、const int *、int *cosnt、const int * const、const int 的区别
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
2018-01-04 創建人:Ruo_Xiao
2018-10-17 修改人:Ruo_Xiao
郵箱:xclsoftware@163.com
修改內容:增加對 delete 指向常量的指針的可行性的說明。
2019-02-20 修改人:Ruo_Xiao
修改內容:增加對const的附加值的說明。
關鍵字又叫做限定符,因為它限定了聲明的含義 英文全稱:constant,意義就是常數,故被const修飾的變量類型都是常類型,即不可改變。 C中的const,在C90(ANSI C 或者 C89)中加入的關鍵字(之前有個K&R C )。 C++中的const,暫時在網上沒有找到相關介紹。由于C語言是在1972年至1973間創建的,而1990年在C90中加入了const,所以C++中的const大概是在其之后加入的。 目的:取代#define。
零、const的今世來生
一、const int
在定義變量的時候必須初始化,否則報錯。
#include "stdafx.h"int _tmain(int argc, _TCHAR* argv[]) {const int i = 0;//i = 4; //error C3892: “i”: 不能給常量賦值//error C2734: “k”: 如果不是外部的,則必須初始化常量對象//const int k; //k = 3; //error C3892: “k”: 不能給常量賦值return 0; }二、const int *
1、聲明該指針變量指向的是常量,即該指針變量的內容可以改變,但是該內容指向的內容不可改變!
#include "stdafx.h"int _tmain(int argc, _TCHAR* argv[]) {const char *p = "Hello world!";//p[3] = '3'; //error C3892: “p”: 不能給常量賦值p = "Hi!";return 0; }2、雖然指向的內容不可改寫,但是delete則是可以的。栗子:
const int *p = new int[3];delete []p;p = nullptr;因為delete只是告訴系統,現在p所指向的這塊內存已還給自由存儲區,不再被使用,可以被其他程序改寫。而此時p依舊指向這塊不可使用的內存,故需要對p進行清零。
三、int *const
聲明該指針變量為常變量,即指針變量里面的內容不可改變,但是該內容指向的內容可以改變!
#include "stdafx.h"int _tmain(int argc, _TCHAR* argv[]) {char *const p = "Hello world!";p[3] = '3'; //p = "Hi!"; error C3892: “p”: 不能給常量賦值return 0; }四、const int * cosnt
聲明該指針變量里面的內容不可改變,同時該內容指向的內容亦不可改變。
#include "stdafx.h"int _tmain(int argc, _TCHAR* argv[]) {const char *const p = "Hello world!";//p[3] = '3'; //error C3892: “p”: 不能給常量賦值//p = "Hi!"; //error C3892: “p”: 不能給常量賦值return 0; }五、const int &
在引用前面加上const,代表該引用為常引用,即被引用的對象不可改變。若是在形參中使用,則不可達到在函數里面修改變量值的目的。
#include "stdafx.h" #include <iostream> using namespace std;int add (const int &a,int &k) {//a += 7; //error C3892: “a”: 不能給常量賦值k += 8;return (a+k); }int _tmain(int argc, _TCHAR* argv[]) {int a = 5;int k = 9;const int &b = a;//b = 7; //error C3892: “b”: 不能給常量賦值int t = add(a,k);cout<<"a = "<<a<<endl;cout<<"b = "<<b<<endl;cout<<"t = "<<t<<endl;cin.get();return 0; }結果:
所以,如果想將形參作為函數的輸出,同時使用了引用的方法,切記不要在引用前面使用const!
六、總結
以上總結了const的具體功能,其附加值也是很高的。
1、增加代碼的可讀性。可以明確向讀你代碼的人傳遞該形參、變量的可操作性。
2、合理的const可以讓編譯器幫你保護你的變量,即:減少bug的出現。
(SAW:Game Over!)
總結
以上是生活随笔為你收集整理的const int、const int *、int *cosnt、const int * const、const int 的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: KR C、ANSI C、C89、C90、
- 下一篇: C语言的实现经过(C代码到CPU执行)