首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C 指針傳遞誤區:int *q = p 使 q 指向同一地址,而非指向 p 自身

     編輯:程式設計綜合問答

誤區代碼


int i = 2;
int *p = &i;
int *q = p;   // 認為 q 存儲 p 的地址
printf("*q=%d q=%d\n", *q, q); // 期望 q 輸出 p 的地址

正確理解

  • int *p:p 是變量,類型「指向 int 的指針」,存儲 int 變量的地址。
  • p = &i:將 i 的地址存入 p。
  • int *q = p:定義 q 同類型指針,將 p 的值(即 i 的地址)賦給 q。此時 p 和 q 都指向 i。
  • *q 等價於 i,輸出 2。
  • q 輸出 i 的地址,與 p 相同。

若需 q 指向 p 本身


int **q = &p; // 二級指針,存儲 p 變量的地址
printf("**q = %d\n", **q); // 2

內存圖示


i (地址 0x1000, 值 2)
p (地址 0x2000, 值 0x1000)  --> 指向 i
q (地址 0x2008, 值 0x1000)  --> 也指向 i
// q 的值是 0x1000,而非 0x2000
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved