Взятие адреса указателя - PullRequest
       1

Взятие адреса указателя

1 голос
/ 06 сентября 2010

Если я объявлю следующие переменные:

int array[10] = { 34, 43,12, 67, 34, 43,26, 98, 423,1 };
int * p = array;

Затем этот цикл:

for ( int i = 0; i < 10; i++ )
{
    std::cout << &*p++ << " ";
}

дает мне другой вывод (другой набор адресов) для этого кода:

for ( int i = 0; i < 10; i++ )
{
    std::cout << p++ << " ";
}

Почему? Разве они не семантически эквивалентны?

EDIT:

Что ж, мои извинения всем, кто ответил на этот вопрос, у меня нет оригинального кода, это был тест, который я сделал дома, и оказалось, что я удалил этот код из своего проекта. (моя широкополосная сеть еще не подключена, поэтому я подождал, пока не приступлю к работе, чтобы опубликовать это) В любом случае - я почти уверен, что забыл инициализировать p. Но вопрос "не являются ли они семантически эквивалентными?" был дан ответ. Спасибо.

Ответы [ 4 ]

13 голосов
/ 06 сентября 2010
int array[10] = { 34, 43,12, 67, 34, 43,26, 98, 423,1 };
int * p = array;

for ( int i = 0; i < 10; i++ )
{
    std::cout << p++ << " ";
}
p = array;
std::cout << '\n';
for ( int i = 0; i < 10; i++ )
{
    std::cout << &*p++ << " ";
}
std::cout << '\n';

дает мне те же адреса. Вы случайно забыли p = array; между?

4 голосов
/ 06 сентября 2010

Если вы не забудете сбросить p до второго цикла, они дадут тот же результат.

0 голосов
/ 07 сентября 2010

сбросить позицию указателя p.

0 голосов
/ 06 сентября 2010

Порядок приоритета сначала «++», затем «*» и, наконец, «&».

Таким образом, p++ выведет адрес array[0] и &*p++ сначала увеличит p, но это постфикс! Таким образом, значение p (а не значение p + 1) будет присвоено *, а затем & &, поэтому это те же самые

Пример:

std::cout << p << std::endl; // Output the adress of p
std::cout << &*p++<<std::endl; // p is increment but it is postfix, so value of p is used and printed
std::cout << &*++p<<std::endl; // p has been increment before and is then incremented again
std::cout << p++ << std::endl; // p has been incremented before, but here p is used first, then incremented
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...