首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> C 語言基礎

C 語言 const 關鍵字:定義唯讀常量與指標保護

     編輯:C 語言基礎

const 用於限定變數值不可修改,建立常量。常量必須在定義時初始化,之後任何賦值行為皆導致編譯錯誤。

基本用法

const int MaxNum = 100; // 推薦寫法
int const MaxNum = 100; // 等效但不推薦
// MaxNum = 90; // 錯誤:嘗試修改 const 變數

慣例將常量名首字母大寫以示區別。初始化可使用任意表達式(含函式呼叫、變數),支援執行期初始化。

const 與指標的四種組合

const int *p1;     // 指向常量整數的指標(資料唯讀)
int const *p2;     // 同上
int *const p3;     // 常量指標(指標本身唯讀)
const int *const p4; // 指標與資料皆唯讀
int const *const p5; // 同上

記憶口訣: const 靠近變數名修飾指標本身,靠近類型修飾指向資料;兩側皆有則雙重保護。

const 在函數參數中的核心價值

單獨定義 const 變數可用 #define 替代,真正價值在於函數參數保護。防止函數內部誤修改指標指向的資料,同時向呼叫者承諾「不會修改你的資料」。

// 標準庫函數原型示例
size_t strlen(const char *str);
int strcmp(const char *str1, const char *str2);
char *strcpy(char *dest, const char *src);
int printf(const char *format, ...);

自訂函數範例:統計字元出現次數

#include <stdio.h>
#include <string.h>

size_t strnchr(const char *str, char ch) {
    int i, n = 0, len = strlen(str);
    for (i = 0; i < len; i++)
        if (str[i] == ch) n++;
    return n;
}

int main() {
    char *str = "https://c.biancheng.net";
    char ch = 't';
    printf("%d\n", strnchr(str, ch)); // 輸出 3
    return 0;
}

const 與非 const 類型轉換規則

  • const char * → char *:禁止(降低權限 → 提升權限,危險)。
  • char * → const char *:允許(提升權限 → 降低權限,安全)。
const char *str1 = "c.biancheng.net";
char *str2 = str1;      // 警告/錯誤
func(str1);             // 傳參本質是賦值,同樣報錯

void func(char *str) { }

標準庫函數參數多為 const,但傳入非 const 引數完全合法且安全。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved