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

C語言&取地址符詳解:scanf參數、指針初始化、地址傳遞

     編輯:C 語言問答

& 取地址運算符核心用法

基本語義

  • 一元運算符,作用於**左值** (變量、陣列元素、解引用指針、結構體成員)
  • 返回操作數在內存中的**地址** (類型為指向該類型的指針)
  • &a 類型為 int* (若 a 為 int)

scanf 必須用 & 的原因


int a, b;
scanf("%d %d", &a, &b);  // 正確
// scanf("%d %d", a, b);  // 錯誤:傳遞值而非地址,scanf 無法修改原變量

scanf 需要修改調用者的變量,C 語言只有值傳遞,必須傳遞地址讓 scanf 通過指針間接寫入內存。

核心應用場景

常見錯誤

  • & 用於常量/字面值/表達式:&10、&(a+b)、&func() — **非左值,編譯錯誤**
  • scanf("%d", a) 忘記 & — 運行時崩潰 (段錯誤) 或寫入錯誤地址
  • 指針變量再取址:&p 類型為 int**,層級加深,需明確意圖

對應運算符:* 解引用

  • *p 訪問 p 指向的內存單元
  • & 和 * 互為逆操作:*&a == a、&*p == p (p 合法時)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
場景代碼示例說明
指針初始化int *p = &a;p 指向 a 的地址
函數修改實參void swap(int *a, int *b)調用 swap(&x, &y)
動態分配返回p = malloc(...)malloc 返回地址,無需 &
陣列名特例int a[10]; &a[0] == a陣列名退化為首元素地址
結構體成員&s.field取成員地址