日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C与C++在const用法上的区别

發布時間:2025/1/21 c/c++ 101 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C与C++在const用法上的区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? ? ?首先,C和C++在大體結構上不同,卻在語法上相同。 ?所以在使用的時候,我們會時常遇到一些莫名其妙的問題,覺得語法上是正確的,但是編譯的時候卻出現一個紅色的 error! 比如今天我遇到的這個有意思的問題。

? ? ?1. 今天看到一段代碼,覺得很有意思:

1 #pragma warning(disable : 4090) 2 3 #include<stdio.h> 4 5 int main(int argv, char args []) { 6 7 const int var = 4; 8 int *p = &var; 9 *p = 1; 10 printf("%d\n",var); 11 getchar(); 12 }

?答案很定不用說: ? ?1 ? ? ?原因也很簡單: ?C弱類型語言,C++是強類型語言。 ?p指針指向了var的地址,并將var的值改變!

但是,我們再看看,這個兩個代碼:

1 #include<iostream> 2 3 using namespace std; 4 5 int main(int args , char argv[]) { 6 7 const int var = 10; 8 std::cout << "var =" << var << std::endl; 9 // int * p= &var; --不能轉換,會報錯! 10 //可以使用強制轉換 11 int *p = (int *)&var; 12 *p = 3; 13 std::cout << "*p =" << *p << std::endl; 14 int num[var]; 15 16 int i = 0; 17 //初始化 18 for (auto data : num) { 19 data =++i; 20 std::cout<<"num["<<i-1<<"] =" << data << std::endl; 21 } 22 getchar(); 23 return 0; 24 }

2. ?即便你用這個const_cast《》:強制去掉const屬性,但是*p=3,這條語句 ,p指向的地址的值任然沒有改變!這兩個代碼的值,都是這個:

1 #include<iostream> 2 3 using namespace std; 4 5 int main(int args , char argv[]) { 6 7 const int var = 10; 8 std::cout << "var =" << var << std::endl; 9 // int * p= &var; --不能轉換,會報錯! 10 //可以使用強制去掉const 屬性 11 int *p = const_cast<int *>(&var); 12 *p = 3; 13 std::cout << "*p =" << *p << std::endl; 14 std::cout << "var =" << var << std::endl; 15 int num[var]; 16 17 int i = 0; 18 //初始化 19 for (auto data : num) { 20 data =++i; 21 std::cout<<"num["<<i-1<<"] =" << data << std::endl; 22 } 23 getchar(); 24 return 0; 25 }

?

結果

為:?? 我們可以看到,var的值,沒有改變! ?原因是C++是強類型語言,C++的數據的類型更加嚴格與苛刻 ! ?

? ?當然對于C++為何會出現指針的值為*p=3而var=10這樣的情況,其實,*P所指的常量地址真實的內存已經修改了,但是編譯器并沒有從內存地址中取值,而是直接從寄存器中取的值,所以var=10依舊表面上依舊沒有發生什么改變!

?

? ? ?2. ? 那么,對于指針而言呢? const 用到指針就會發揮大作用,可以設定權限,比如 ?int const * p ? / ?const int *p (這兩個其實可以看做是同一個類型)均為常量指針, 還有 int * const p 指針常量,還有const int ?* const p ?;

? ? ? ? 根據它們的特性 ?權限如下:

? ? ? ? ? ? int ?const *p ? ? ? ?-----只能讀,不能寫,既然是指向常量的指針,當然是可以指向其他常量的。

? ? ? ? ? ? int ?* ?const p ? ? -----能讀也能寫,但是既然是指針常量, 當然是不能指向其他地址,無法修改其他地址的值。

? ? ?   int const * const p ? ?----能讀不能寫,而且無法指向其他地址的值。

? ? ? 這樣就可以設定權限,對于系統而言,這個是很安全而且很妥當的,還很power ! 當然還可以運用到指針函數什么的 ! 這樣const其實作用還是很有用初 的! ?特別是用在對安全要求很高的系統,比如銀行的系統什么的?

總結

以上是生活随笔為你收集整理的C与C++在const用法上的区别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。