目錄
- 一.const 簡介
- 二.const 修飾指標
- 1.const int *p
- 2.int const *p
- 3.int * const p
- 4.const int * const p
- 三.猜你喜歡
零基礎 C/C++ 學習路線推薦 : C/C++ 學習目錄 >> C 語言基礎入門
一.const 簡介
const 是 constant 的縮寫,意思是“恒定不變的”!它是定義只讀變數或者常變數的關鍵字,const 定義的是變數,但又相當于常量;說它定義的是常量,但又有變數的屬性,所以也叫常變數,
用 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 Failed
error: assignment of read-only variable 'a'
6 | a = 200 ;
| ~~^~~~~
*/
二.const 修飾指標
首先應該回憶一下指標內容:
int *p = 5;
/*
p:指標的記憶體地址,類似門牌號,十六進制表示:0xffff
*p:指標的記憶體地址對應的值,類似門牌號對應里面住的人,即5
*/
1.const int *p
當把 const 放最前面的時候,它修飾的就是 *p,那么 *p 就不可變,*p 表示的是指標變數 p 所指向的記憶體單元里面的內容,此時這個內容不可變,其他的都可變,如 p 中存放的是指向的記憶體單元的地址,這個地址可變,即 p 的指向可變,但指向誰,誰的內容就不可變,
/******************************************************************************************/
//@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 值不能發生改變否則 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 中存放的記憶體單元的地址不可變,而記憶體單元中的內容可變,即 p 的指向不可變,p 所指向的記憶體單元的內容可變,
/******************************************************************************************/
//@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;
}
/*
輸出:
ello
bbb
*/
靈魂拷問:知道為什么輸出是 “ello” 而不是 “hello” ??
4.const int * const p
*p 和 p 都被修飾了,那么 p 中存放的記憶體單元的地址和記憶體單元中的內容都不可變,
/******************************************************************************************/
//@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 修飾指標可以保護用指標訪問記憶體時由指標導致的被訪問記憶體空間中資料的誤更改,因為指標是直接訪問記憶體的,沒有拷貝,而有些時候使用指標訪問記憶體時并不是要改變里面的值,而只是要使用里面的值,所以一旦不小心誤操作把里面的資料改了就糟糕了,
三.猜你喜歡
- C 語言 陣列下標越界和記憶體溢位區別
- C 語言 指標宣告和定義
- C 語言 指標 p++ / p–
- C 語言 p++/§++/_(p++)/_p++
- C 語言 使用指標遍歷陣列
- C 語言 指標和陣列區別
- C 語言 指標陣列和陣列指標區別
- C 語言 空指標 NULL
- C 語言 void 指標
- C 語言 野指標
- C 語言 函式值傳遞和址傳遞
- C 語言 函式預設引數
- C 語言 函式不定長引數
- C 語言 函式指標
- C 語言 指標函式
- C 語言 回呼函式 callback
- C 語言 typedef
- C 語言 define 定義常量
- C 語言 define 防止頭檔案重復包含
- C 語言 #pragma once
- C 語言 #include <> 與 #include “” 區別
- C 語言 const 修飾變數
- C 語言 const 修飾指標
未經允許不得轉載:猿說編程 ? C 語言 const 修飾指標
本文由博客 - 猿說編程 猿說編程 發布!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/298227.html
標籤:C
