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

C語言指標實戰:直接向記憶體位址寫入資料驗證

     編輯:關於C語言

實驗程式碼

#include <stdio.h>

int main() {
    int a = 0;
    int *p = &a;
    int *q = (int *)0x18FEF0;  // 假設 a 的位址為 0x18FEF0
    
    printf("&a = %p, a = %d\n", &a, a);
    printf("p = %p, *p = %d\n", p, *p);
    printf("q = %p, *q = %d\n", q, *q);
    
    *q = 3;  // 透過 q 修改記憶體內容
    
    printf("修改後: a = %d, *p = %d, *q = %d\n", a, *p, *q);
    return 0;
}

執行結果分析

&a = 0x18FEF0, a = 0
p = 0x18FEF0, *p = 0
q = 0x18FEF0, *q = 0
修改後: a = 3, *p = 3, *q = 3

核心概念驗證

  1. 變數名 = 記憶體位址的別名:a、*p、*q 指向同一塊記憶體
  2. 指標存儲位址:p、q 值均為 0x18FEF0
  3. 解參考修改內容:*q = 3 直接改寫該位址資料,a、*p 同步反映
  4. 型別轉換:(int *)0x18FEF0 將整數常數強制視為指標

⚠️ 現代系統警示

  • 現代作業系統啟用 ASLR(位址空間佈局隨機化),變數位址每次執行不同
  • 硬編碼位址 0x18FEF0 僅供教學示意,實際開發絕不可硬編碼位址
  • 隨意寫入任意位址會導致 Segmentation Fault 或破壞其他程式資料

正確指標用法

int a = 0;
int *p = &a;     // 取合法變數位址
*p = 3;          // 透過指標修改
printf("%d", a); // 3
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved