c/c++中的const
生活随笔
收集整理的這篇文章主要介紹了
c/c++中的const
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
關于const能否修改
c語言
#include <stdio.h>
int main() {const int i = 10;//const int i; //錯誤,const變量必須在定義時初始化//i=100; //錯誤,const類型不能修改int *p = &i; //將i的地址賦值給指針p( 在C中ok)*p = 20; //通過指針修改const int i的值printf("i=%d,*p=%d\n", i, *p); // 20 20return 0;
}
c++
#include <iostream>
using namespace std;
int main() {const int i = 10;//int *pi = &i; 編譯錯誤(C++中不行)const int *pi = &i; //ok//*pi = 20; 編譯錯誤(指向常量的指針無法修改常量)//下面嘗試,強轉轉換來修改常量:int *pi2 = (int*)&i; //將常量i的地址強轉為int **pi2 = 20; //將pi2指針指向的地址內容修改為20//觀察 *pi2 和 i 對應的內存地址是否一樣:cout << "pi2=" << pi2 << " &i=" << &i << endl;//pi2=0xffffcbd4 &i=0xffffcbd4//觀察 *pi2 和 i 的值cout << "*pi2=" << *pi2 << " i=" << i << endl;//輸出 *pi2=20 i=10//思考:為什么會出現這樣的結果??// 編譯器的優化,將所有的i都替換成了10// 通過使用volatile限定了ii每次都在內存中去內容volatile const int ii = 10; //使用volatile關鍵字int *pii = (int*)ⅈ*pii = 20;cout << "*pii=" << *pii << " ii=" << ii << endl;//輸出 *pii=20 ii=20return 0;
}
const和引用以及指針
const 和 引用
#include <iostream>
using namespace std;
int main() {const int i = 10;//int &ri = i; 錯誤,非常量引用指向常量int ii = 20;const int &rii = ii; //OK//rii = 30; 錯誤,常量引用無法修改值double fd = 1.23;//int &r = fd; 錯誤const int &r = fd; //OK//觀察 fd 和 r 的值cout << fd << " " << r << endl;//觀察 fd 和 r 的地址cout << &fd << endl;cout << &r << endl;return 0;
}1.23 1
0xffffcbc8
0xffffcbd4
const和指針
- 指向常量的指針,指針指向的對象是常量稱為底層const
const int *p; //等價與int const *p;
p = &i;
p = &j; //p的指向可以改變,意味著p不是常量
//*p = 100; 錯誤,*p 改不了值(意味著*p是常量)
- 常量指針,指針本身是常量,頂層const
int *const p = &i; //const 在*的后面,p是常量,所以一開始就要初始化
// p = &j; 錯誤,p的指向不能改變
*p = 100; //*p的值可以改變
- 指向常量的常量指針
const int * const p = &i; //等價于int const * const p = &i;
// p = &j; 錯誤
// *p = 100; 錯誤
總結
以上是生活随笔為你收集整理的c/c++中的const的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Pinia轻量级状态管理
- 下一篇: 快速删除c/c++语言中的注释