Re: [問題] 一個reference的問題

作者: XX124188 (kinger)   2014-08-28 03:26:00
※ 引述《kdok123 (小天)》之銘言:
: int a[5]={1,2,3,4,5};
: int *ptr=(int *)(&a+1);
: printf("%d",*(ptr-1));
: 輸出是5
: int a[5]={1,2,3,4,5};
: int *ptr=(int *)(a+1);
: printf("%d",*(ptr-1));
: 輸出是1
: 我能理解第二個例子,可是第一個例子是什麼意思?
: 我嘗試把a和&a都印了出來,發現兩個位址是一樣的
: a+1和&a+1分別和a及&a的位址差距,一個是4一個是20(4*5)
: 可以理解是跟矩陣大小有關
: 但還是不理解&a+1的意思...
: 有人可以幫我解說嗎??
: 感謝!
請問為什麼會前進5個int@@?
作者: arthur104 (arthur)   2014-08-28 08:18:00
可以想成 int a[][5], 所以 &a + 1 會跑到 a[1][0]所以 ptr - 1 就會是 a[0][5],因為compiler會自動認為a的一個row有5個element,所以 &a + 1就是一次跳5個
作者: sadanlu (孤冬)   2014-08-28 10:32:00
因為第二個a指標指向陣列名稱, a + 1就會指向下一個陣列名稱, 然後因為轉型成int指標, ptr - 1就變成第一個陣列的最後一個元素

Links booklink

Contact Us: admin [ a t ] ucptt.com