C语言 const 修饰指针 - C语言零基础入门教程
目錄
- 一.const 簡介
- 二.const 修飾指針
- 1.const int *p
- 2.int const *p
- 3.int * const p
- 4.const int * const p
- 三.猜你喜歡
零基礎(chǔ) C/C++ 學(xué)習(xí)路線推薦 : C/C++ 學(xué)習(xí)目錄 >> C 語言基礎(chǔ)入門
一.const 簡介
const 是 constant 的縮寫,意思是“恒定不變的”!它是定義只讀變量或者常變量的關(guān)鍵字。const 定義的是變量,但又相當(dāng)于常量;說它定義的是常量,但又有變量的屬性,所以也叫常變量。
用 const 定義的變量的值是不允許改變的,即不允許給它重新賦值,即使是賦相同的值也不可以。所以說它定義的是只讀變量。這也就意味著必須在定義的時候就給它賦初值。
/******************************************************************************************/ //@Author:猿說編程 //@Blog(個人博客地址): www.codersrc.com //@File:C語言教程 - C語言 const 修飾指針 //@Time:2021/07/02 08:00 //@Motto:不積跬步無以至千里,不積小流無以成江海,程序人生的精彩需要堅持不懈地積累! /******************************************************************************************/#include <stdio.h>int main() {const int a = 20 ;printf("a = %d\n",a);a = 200 ;printf("a = %d\n",a);return 0; }/*輸出:Compilation Failederror: assignment of read-only variable 'a'6 | a = 200 ;| ~~^~~~~*/二.const 修飾指針
首先應(yīng)該回憶一下指針內(nèi)容:
int *p = 5;/*p:指針的內(nèi)存地址,類似門牌號,十六進制表示:0xffff*p:指針的內(nèi)存地址對應(yīng)的值,類似門牌號對應(yīng)里面住的人,即5*/1.const int *p
當(dāng)把 const 放最前面的時候,它修飾的就是 *p,那么 *p 就不可變。*p 表示的是指針變量 p 所指向的內(nèi)存單元里面的內(nèi)容,此時這個內(nèi)容不可變。其他的都可變,如 p 中存放的是指向的內(nèi)存單元的地址,這個地址可變,即 p 的指向可變。但指向誰,誰的內(nèi)容就不可變。
/******************************************************************************************/ //@Author:猿說編程 //@Blog(個人博客地址): www.codersrc.com //@File:C語言教程 - C語言 const 修飾指針 //@Time:2021/07/02 08:00 //@Motto:不積跬步無以至千里,不積小流無以成江海,程序人生的精彩需要堅持不懈地積累! /******************************************************************************************/# include <stdio.h>int main(void) {int a = 10;const int *p = &a;int * q = &a;*q = 20;printf("a = %d\n", a);a = 30;printf("a = %d\n", a);//const int *p = &a; //表示 *p 值不能發(fā)生改變否則 error: assignment of read-only location '* p'//*p = 30; //這么寫就是錯的return 0; }/*輸出:a = 20 a = 30*/2.int const *p
const 和 int 可以互換位置,所以 int const *p 和 const int *p 二者是等價的;
3.int * const p
此時 const 修飾的是 p,所以 p 中存放的內(nèi)存單元的地址不可變,而內(nèi)存單元中的內(nèi)容可變。即 p 的指向不可變,p 所指向的內(nèi)存單元的內(nèi)容可變。
/******************************************************************************************/ //@Author:猿說編程 //@Blog(個人博客地址): www.codersrc.com //@File:C語言教程 - C語言 const 修飾指針 //@Time:2021/07/02 08:00 //@Motto:不積跬步無以至千里,不積小流無以成江海,程序人生的精彩需要堅持不懈地積累! /******************************************************************************************/# include <stdio.h>int main(void) {const char *p = "hello"; //*p 不可以改變 ,p地址可以改變char* const q = "bbb"; // q地址不能改變p++; //ok//q++; //這句是錯誤的. error: increment of read-only variable 'q'printf("%s\n",p);printf("%s\n",q);return 0; }/*輸出:ellobbb*/靈魂拷問:知道為什么輸出是 “ello” 而不是 “hello” ??
4.const int * const p
*p 和 p 都被修飾了,那么 p 中存放的內(nèi)存單元的地址和內(nèi)存單元中的內(nèi)容都不可變。
/******************************************************************************************/ //@Author:猿說編程 //@Blog(個人博客地址): www.codersrc.com //@File:C語言教程 - C語言 const 修飾指針 //@Time:2021/07/02 08:00 //@Motto:不積跬步無以至千里,不積小流無以成江海,程序人生的精彩需要堅持不懈地積累! /******************************************************************************************/# include <stdio.h>int main(void) {const char * const p = "hello"; //*p 不可以改變 ,p地址不可以改變//*p++; //這句是錯誤的. error: increment of read-only variable 'p'//p++; //這句是錯誤的. error: increment of read-only variable 'p'printf("%s\n",p);return 0; }綜上所述,使用 const 修飾指針可以保護用指針訪問內(nèi)存時由指針導(dǎo)致的被訪問內(nèi)存空間中數(shù)據(jù)的誤更改。因為指針是直接訪問內(nèi)存的,沒有拷貝,而有些時候使用指針訪問內(nèi)存時并不是要改變里面的值,而只是要使用里面的值,所以一旦不小心誤操作把里面的數(shù)據(jù)改了就糟糕了。
三.猜你喜歡
未經(jīng)允許不得轉(zhuǎn)載:猿說編程 ? C 語言 const 修飾指針
總結(jié)
以上是生活随笔為你收集整理的C语言 const 修饰指针 - C语言零基础入门教程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: BugkuCTF-Crypto题rsa
- 下一篇: Python frozenset 集合