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

C 語言 scanf 參數傳遞詳解:為什麼字符數組不需要取地址符?

     編輯:程式設計疑難解答

核心結論

scanf("%s", str) 中 str 是字符數組名,在表達式中會隱式轉換為指向首元素的指針(即 &str[0]),因此不需要額外的 &。而 scanf("%d", &n) 中 n 是整型變量,需顯式取地址傳遞指針。

詳細規則

  • 字符數組(char str[]):數組名即首地址,直接傳遞 str 等價於 &str[0]。
  • 基本類型變量(int, float, double 等):必須使用 & 取地址。
  • 指針變量:若已有指針 int *p = &n;,則 scanf("%d", p) 直接傳遞指針值,無需再取地址。

代碼示例

int n;
int *p = &n;
scanf("%d", p); // 正確,p 本身就是地址

char str[20];
scanf("%s", str); // 正確,str 退化為指針

// 錯誤示例
scanf("%s", &str); // &str 類型是 char(*)[20],與 %s 期望的 char* 不匹配

記憶口訣

「數組名是地址,普通變量取地址,指針變量直接用」。

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