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

C 語言數組輸出地址而非內容?printf("%d", a) 錯誤用法解析

     編輯:程式設計綜合問答

新手常見困惑:

int a[10];
for (int i = 0; i < 10; i++) a[i] = i+1;
printf("%d\n", a); // 輸出類似 1244960 (地址值)

期望輸出 12345678910,實際輸出一串數字——這是數組首地址。

根本原因

  • C 語言中數組名 `a` 在大多數表達式中退化為指向首元素的指針(類型 `int *`)。
  • printf("%d", a) 將指釖地址按整數格式打印,而非遍歷元素。
  • C 無內置數組整體輸出語法,必須手寫循環。

正確輸出方式

// 方式 1:循環逐個打印
for (int i = 0; i < 10; i++) printf("%d", a[i]);
printf("\n");

// 方式 2:封裝函數復用
void printArray(int *arr, int n) {
    for (int i = 0; i < n; i++) printf("%d ", arr[i]);
    printf("\n");
}
printArray(a, 10);

進階:想輸出無分隔符 "12345678910"

for (int i = 0; i < 10; i++) printf("%d", a[i]); // 直接 %d 無空格
// 或用 sprintf 拼接字符串後一次輸出

記憶口訣

數組名是指針,打印需循環;指針指向首元素,地址非內容。

這也是 C 語言「數組與指針等價但不等同」的經典體驗點,搞懂退化規則,指針題再不怕。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved