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

C 語言指針算術經典面試題:&a + 1 與 a + 1 的區別

     編輯:程式設計綜合問答

代碼

int a[5] = {1,2,3,4,5};
int *p = (int*)(&a + 1);
printf("%d, %d\n", *(a + 1), *(p - 1));

輸出

2, 5

詳細解析

表達式類型值/含義
aint* (退化)首元素地址 &a[0]
&aint(*)[5]整個數組地址
&a + 1int(*)[5]跨過整個數組,指向數組尾後
(int*)(&a + 1)int*指向 a[5] (不存在的第6個元素位置)
p - 1int*指向 a[4] (最後一個元素,值 5)
a + 1int*指向 a[1] (值 2)

記憶口訣

  • &a + 1 = 數組指針 + 1 = **跨過整個數組**。
  • a + 1 = 元素指針 + 1 = **移動到下一個元素**。

實戰應用

計算數組長度:size_t n = (int*)(&a + 1) - a; (編譯期常量)。

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