арифметика указателя с ++ - PullRequest
2 голосов
/ 26 ноября 2011
int a[5];

cout << &a[1] << " " << &a[0] << endl;
cout << (&a[1] - &a[0]);

Почему в приведенном выше коде & a [1] - & a [0] равно 1, а не 4?Разве между этими адресами не должно быть 4 байта, поскольку у нас есть массив int?

Ответы [ 3 ]

8 голосов
/ 26 ноября 2011

Нет, разница указателя в элементах, а не в байтах.

2 голосов
/ 26 ноября 2011

Указатели увеличиваются на размер типа. Причина в том, что вы хотите указать на следующий элемент. Итак, продолжаем пример.

int a[5];
int *ptr=&a[0];

// ptr is now pointing at first element.

ptr+3; // now its pointing at 3rd element.
1 голос
/ 26 ноября 2011

Чтобы получить его в байтах: (посмотреть вживую https://ideone.com/CrL4z)

int a[5];

cout << (a+1) << " " << (a+0) << endl;
cout << (reinterpret_cast<char*>(a+1) - reinterpret_cast<char*>(a+0));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...