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

C 語言進階筆記(十三):指針與指針變量——從門牌號比喻到間接引用本質

     編輯:關於C語言

指針定義:內存的門牌號

街道 X 有 1024 棟房子,編號 X[0~1023],每棟存一個整數。房子編號即指針——值為其他內存對象地址的數據類型。
換言之:指針 = 內存地址的抽象。凡能通過某方式訪問內存對象,該方式即指針。如電話號碼找人(電話本是指針變量)、GPS 坐標找人(GPS 是指針變量)。

指針變量聲明要點

int *p; 未確定值時必須初始化為 NULL:
#define NULL ((void*)0)。
Debug 下未初始化指針為 0xCCCCCCCC,Release 下為隨機垃圾值,極危險。

指針 vs 地址

  • 地址:內存編號信息。
  • 指針:地址 + 解釋信息(類型)。
    int *p → 該地址按 int 解析;float *q → 按 float 解析。

直接引用 vs 間接引用

  • 直接引用:變量名 → 編譯器自動轉地址 → 存值。a = 123;
  • 間接引用:先存地址到指針變量,再通過指針訪問。
    int *p = &b; *p = 5; 等價於 b = 5;

代碼示例


#include <stdio.h>
void main() {
    int a, b;
    int *p;
    p = &b;
    a = 3;      // 直接引用
    *p = 5;     // 間接引用 b
}

關於數組名的思考

  • 數組名是地址常量(如 123,321),無內存空間,編譯期融入指令碼,不可取地址(&a 無意義)。
  • 函數傳參時常量會有臨時副本空間(如 go(123)),但運行時常量不佔數據區,佔代碼區。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved