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

歡迎訪問 生活随笔!

生活随笔

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

c/c++

C++学习笔记(二)

發布時間:2023/11/30 c/c++ 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++学习笔记(二) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文將主要介紹const關鍵字的使用。

首先,說一下const是什么: const修飾的數據類型是指常類型,常類型的變量或對象的值是不能被更新的。

然后,我們來看一下這四處聲明:

const int a = 1; //code1 const int *p = &a; //code2 int * const p = &a; //code3 const int * const p = &a; //code4

下面就具體說一下這四行代碼的作用與區別。

code1最簡單,即聲明a初值為1,且為常量,其值不可更改;

code2即將變量a的地址賦值給p,此時輸出*p的值為1,而且若進行*p = 2會報錯,也就意味著p所指向的值(a的值)是不可更改的;

code3因為const修飾的變量是p,同code1,也就意味著p存儲的值(變量a的地址,也就是p指向的地址)是不可更改的,若進行p = &b會報錯;

code4綜合code2 code3即可得出結論,p指向的地址和p指向變量的值都是不可更改的。

指針和const

現在,我們再來看一下指針與const結合使用時的微妙之處。

首先通過一個題來引出這部分內容:

/*僅通過一行代碼來使程序的最后輸出為2018*/const int a = 2017;//此處填入一行代碼cout << a << endl;

剛看到這里,可能會用疑惑,前面不是剛說了a是const int類型,值不能修改嗎?
其實,還是因為我們的理解不深入,說的其實是不可以直接對const類型的值進行修改,但數據就在內存中放著,難道我們就只能眼睛看著,而沒有任何辦法嗎?當然不是,此刻,神奇的指針又該出場了,通過指針間接修改a的值。我們可以通過指針找到變量a的內存空間,在內存中對a的值進行修改。

即 *((int *)&a) = 2018;,這樣,就會在最終輸出時輸出2018。

因為上述代碼用到了強制類型轉化,所以在這里再說一下,C++是不允許將const類型轉化為非const類型的,因為如果:

const int x = 10; int *p = &x;

通過上面的討論,我們已經知道到了x的值時const類型,不可被更改,然而將x的地址賦給p,卻可以通過指針輕易的修改x的值,這就使得x的狀態很荒謬。但要是必須這樣做,只能通過強制類型轉化來實現。

/*僅通過一行代碼來使程序的最后輸出為2018*/const int a = 2017;*((int *)&a) = 2018; //此處填入一行代碼cout << a << endl;

PS:如果數據類型本身并不是指針,則可以將const數據或非const數據的地址賦給指向const的指針,但只能將非const數據的地址賦給非const指針。

總結

以上是生活随笔為你收集整理的C++学习笔记(二)的全部內容,希望文章能夠幫你解決所遇到的問題。

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