c 陣列 和 陣列指標

2021-06-27 16:52:53 字數 836 閱讀 2475

今天 乙個朋友 面試,

面試題如下:

int _tmain(int argc, _tchar* argv)

; int * ptr = (int * ) (&a + 1);

printf("%d\t%d",*(a+1),*(ptr-1));

return 0;

}

我覺得 指標 只要 掌握 兩方面資訊 就 沒什麼 可難的了. 

一是 指標變數 裡 存放的 位址

二是 指標變數 的 基礎 型別

了解 存放位址, 是 因為 所有 指標的 加減 都是 從 這個 位址 作為 基礎的.

需要 了解 指標的 型別 ,是 因為 int 占用 4個位元組,char 乙個位元組,float,double 8 個位元組(具體 得看 編譯器,目前指的是32位的編譯器), 所以 指標 加減的 大小 也是 不同的.

了解 這些 就沒什麼 可難的了..

解析題目:

int * ptr = (int * ) (&a + 1);
譚浩強的 書裡 說過  a = &a[0], 也就是 a 等於 第乙個 變數的 位址.   *(a+1) = a[1]  = 2

&a 可以 理解為 指向 乙個 陣列 的 指標, &a + 1  的位址 就是 a[0+5] 的位址,

然後將  這個指標 強轉成 int * , 就 又 變成 指向 int 的 指標, 這樣 ptr -1 其實 就是  a[4],  *(ptr-1) = a[4]  就是 5

C指標陣列和陣列指標

測試 int main 定義二維陣列m並初始化 int p 4 陣列指標 p是指標,指向一維陣列,每個一維陣列有4個int元素 int i,j int q 3 指標陣列 q是陣列,陣列元素是指標,3個int指標 p m p是指標,可以直接指向二維陣列 printf 陣列指標輸出元素 n for i ...

C語言指標陣列和陣列指標

初學者總是分不出指標陣列與陣列指標的區別。其實很好理解 指標陣列 首先它是乙個陣列,陣列的元素都是指標,陣列佔多少個位元組由陣列本身決定。它是 儲存指標的陣列 的簡稱。陣列指標 首先它是乙個指標,它指向乙個陣列。在32 位系統下永遠是佔4 個位元組,至於它指向的陣列佔多少位元組,不知道。它是 指向陣...

C語言指標陣列和陣列指標

初學者總是分不出指標陣列與陣列指標的區別。其實很好理解 指標陣列 首先它是乙個陣列,陣列的元素都是指標,陣列佔多少個位元組由陣列本身決定。它是 儲存指標的陣列 的簡稱。陣列指標 首先它是乙個指標,它指向乙個陣列。在32 位系統下永遠是佔4 個位元組,至於它指向的陣列佔多少位元組,不知道。它是 指向陣...