當你寫 (a_pointer + a_number) 的時候,實際上是:
(a_pointer + (a_number * sizeof(*a_pointer)))
總之先拿 code 來觀察一下,
#include <stdio .h>
int main() {
int a[10];
int *p = a;
printf("a = %p\n", a);
printf("a + 1 = %p\n", a + 1);
printf("&a = %p\n", &a);
printf("&a + 1 = %p\n", &a + 1);
printf("&p = %p\n", &p);
printf("&p + 1 = %p\n", &p + 1);
return 0;
}
會得到以下的結果(記憶體當然不會一樣,不過可以觀察一下差距)
a = 0x7fff56c39650
a + 1 = 0x7fff56c39654
// 相差了 4 bytes,也就是一個 int 大小
&a = 0x7fff56c39650
&a + 1 = 0x7fff56c39678
// 相差了 40 bytes,也就是一個 a 的大小(sizeof(int) * 10 = 4 * 10)
&p = 0x7fff56c39640
&p + 1 = 0x7fff56c39648
// 相差了 8 bytes,也就是一個 pointer 大小(64bit 的系統下)
沒有留言:
張貼留言