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

C 語言指針與自增運算:為什麼選項 C 也正確?

     編輯:程式設計綜合問答

某 C 語言考題:「若要對 a 進行合理的自增運算,則 a 應具有( )說明」,選項 D(int b[10], *a = b;)為標準答案,但選項 C(char (*a)[3];)同樣合法,僅是用法罕見。

逐項分析

  • A: int a[3][2]; — 數組名非左值,不可自增(a++ 編譯錯誤)。
  • B: char *a[] = {"12","ab"}; — 指針數組,a 為數組名,同理不可自增。
  • C: char (*a)[3]; — 指向含 3 個 char 的數組的指針。a 是指針變量,a++ 合法,步長為 sizeof(char[3]) = 3 字節。雖語法正確,但業務語義鮮見。
  • D: int b[10], *a = b; — a 指向數組首元素,a++ 步長 4 字節,最符合「遍歷數組」直覺,故為最佳答案。

驗證代碼

char (*a)[3];
a = (char(*)[3])malloc(2 * sizeof(char[3]));
a++; // 合法,地址增加 3
printf("%p\n", (void*)a);

結論:C 語法合法但非典型用法,考試選「最合適」而非「合法」,D 為最佳。

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