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

C語言指針打印差異:&array[i]、array[i]、%p 與 %d 的正確用法

     編輯:程式設計綜合問答

代碼對比

int array[5] = {10,20,30,40,50};
printf("%d\n", &array[i]);  // 錯誤:%d 期望 int,實傳 int* → 未定義行為
printf("%p\n", array[i]);   // 錯誤:%p 期望 void*,實傳 int → 未定義行為
printf("%p\n", &array[i]);  // 正確:打印第 i 元素地址

格式化字符串與參數類型對照表

格式符期望類型典型用法
%dint打印整數值
%pvoid*打印地址,**必須強轉** (void*)&array[i]
%x/%lxunsigned int/long打印十六進制地址(非標準但常用)

正確打印地址的標準寫法

printf("array[%d] address = %p\n", i, (void*)&array[i]);
  • %p 要求 void*,嚴格遵循 C 標準請強轉。
  • 若編譯器警告 format '%p' expects argument of type 'void*',即為類型不匹配。

進階:數組名與指針的區別

int a[5];
printf("%p\n", (void*)a);       // 首元素地址
printf("%p\n", (void*)&a);      // 整個數組地址(值相同,類型不同:int(*)[5])
printf("%p\n", (void*)&a[0]);   // 同 a
// sizeof(a) = 20 (整個數組大小)
// sizeof(&a) = 8/4 (指針大小)

避坑口訣

  1. 打印地址 → %p + (void*)。
  2. 打印整數 → %d / %ld。
  3. 格式符與實參**逐個對應**檢查,開啟 -Wall -Wextra -Wformat=2 讓編譯器幫你查。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved