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

《深入理解 C 指標》閱讀筆記第一章:size_t、指標算術、const 指標綜合練習

     編輯:關於C

size_t 使用規範

  • 表示無符號大小/索引的標準型別(stddef.h)。
  • 格式化輸出用 %zu (C99) 或 %lu 配合轉型。
  • 避免賦值負數:size_t x = -1; 會變成極大正數(模 2^N)。

指標算術本質

int *p = &a;      // 假設 a 在 0x1000
p + 1  →  0x1004  // + sizeof(int)
p - 1  →  0x0FFC
char *q = &c;     // 假設 c 在 0x2000
q + 1  →  0x2001  // + sizeof(char) = 1

步長 = sizeof(指向型別)。

const 指標四種組合

宣告含義可修改指向可修改值
const int *p指向常量的指標✅❌
int *const p常量指標(指向不可變)❌✅
const int *const p指向常量的常量指標❌❌
int *p普通指標✅✅

程式碼驗證

#include 

void test_size_t(void) {
    size_t t1 = -1;
    printf("%zu %u\n", t1, (unsigned)t1); // 4294967295 4294967295
    size_t t2 = 1;
    printf("%zu %u\n", t2, (unsigned)t2); // 1 1
}

void test_ptr_arith(void) {
    int a = 1; int *p = &a;
    char c = 'x'; char *q = &c;
    printf("p=%p p+1=%p p-1=%p\n", (void*)p, (void*)(p+1), (void*)(p-1));
    printf("q=%p q+1=%p q-1=%p\n", (void*)q, (void*)(q+1), (void*)(q-1));
}

void test_const_ptr(void) {
    int v1 = 10, v2 = 20;
    const int *p1 = &v1;       // 指向常量
    v1 = 30;                   // OK
    // *p1 = 40;               // Error
    int *const p2 = &v1;       // 常量指標
    *p2 = 50;                  // OK
    // p2 = &v2;               // Error
    const int *const p3 = &v2; // 雙重 const
    // *p3 = 60; p3 = &v1;     // Error
}

int main(void) {
    test_size_t();
    test_ptr_arith();
    test_const_ptr();
    return 0;
}

學習心得

  • size_t 專用於大小/索引,切勿存負數。
  • 指標運算自動乘上型別大小,這是型別系統的核心價值。
  • const 位置決定約束對象:* 左邊約束值,右邊約束指標本身。
  • 良習:盡量在宣告時加上 const,讓編譯器幫你防錯。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved