array pointer ( вопрос чайника)
От: i.dmitry  
Дата: 02.01.10 20:18
Оценка:
прошу помощи в понимании:
int main ()
{

    int x[4] = {0, 2, 4, 6};
    int *px;
    int y;

    px = x;

    y = *px;
    printf ("(y = *px), y = %x\n", y);  
    
    y = *px++;
    printf ("(y = *px++), y = %x\n", y);

    y = ++*px;
        printf ("(y = ++*px), y = %x\n", y);
    
    y = *++px;
    printf ("(y = *++px), y = %x\n", y);

    y = (*px)++;
    printf ("(y = (*px)++), y = %x\n", y);
    
    y = ++(*px);
    printf ("(y = ++(*px)), y = %x\n", y);

    cin.get();
    return 0;
}


правильно ли я понимаю, что происходит в строчке: y = (*px)++
1) извлекаем значение на которое указывает px. *px = 4
2) далее к 4 прибавляем 1, получаем 5. т.е. y = 5.

Вопрос: почему принт эфом выводится значение 4?

-спасибо
Re: array pointer ( вопрос чайника)
От: LaptevVV Россия  
Дата: 02.01.10 20:32
Оценка:
Здравствуйте, i.dmitry, Вы писали:

ID>прошу помощи в понимании:

ID>
ID>int main ()
ID>{

ID>    y = (*px)++;
ID>    printf ("(y = (*px)++), y = %x\n", y);
    
ID>    y = ++(*px);
ID>    printf ("(y = ++(*px)), y = %x\n", y);

ID>    cin.get();
ID>    return 0;
ID>}
ID>


ID>правильно ли я понимаю, что происходит в строчке: y = (*px)++

ID>1) извлекаем значение на которое указывает px. *px = 4
ID>2) далее к 4 прибавляем 1, получаем 5. т.е. y = 5.

ID>Вопрос: почему принт эфом выводится значение 4?

Потому что это — постфиксный инкремент. В этом случае сначала выполняется присваивание, а потом увеличение значения. В н попадает неувеличенное значение.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[2]: array pointer ( вопрос чайника)
От: i.dmitry  
Дата: 02.01.10 20:40
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>Здравствуйте, i.dmitry, Вы писали:


ID>>прошу помощи в понимании:

ID>>
ID>>int main ()
ID>>{

ID>>    y = (*px)++;
ID>>    printf ("(y = (*px)++), y = %x\n", y);
    
ID>>    y = ++(*px);
ID>>    printf ("(y = ++(*px)), y = %x\n", y);

ID>>    cin.get();
ID>>    return 0;
ID>>}
ID>>


ID>>правильно ли я понимаю, что происходит в строчке: y = (*px)++

ID>>1) извлекаем значение на которое указывает px. *px = 4
ID>>2) далее к 4 прибавляем 1, получаем 5. т.е. y = 5.

ID>>Вопрос: почему принт эфом выводится значение 4?

LVV>Потому что это — постфиксный инкремент. В этом случае сначала выполняется присваивание, а потом увеличение значения. В н попадает неувеличенное значение.

тогда как сделать чтобы выводилось увеличенное?

что-то я совсем запутался.

    int a = 5;
    int *pa = &a;
    int b;

    b = (*pa)++;
    cout<<(*pa)++;
    cout<<b;


почему в первом cout выводится 6, а во втором 5?
Re[3]: array pointer ( вопрос чайника)
От: Logot Украина  
Дата: 02.01.10 20:47
Оценка:
Здравствуйте, i.dmitry, Вы писали:

ID>Здравствуйте, LaptevVV, Вы писали:


LVV>>Здравствуйте, i.dmitry, Вы писали:


ID>>>прошу помощи в понимании:

ID>>>
ID>>>int main ()
ID>>>{

ID>>>    y = (*px)++;
ID>>>    printf ("(y = (*px)++), y = %x\n", y);
    
ID>>>    y = ++(*px);
ID>>>    printf ("(y = ++(*px)), y = %x\n", y);

ID>>>    cin.get();
ID>>>    return 0;
ID>>>}
ID>>>


ID>>>правильно ли я понимаю, что происходит в строчке: y = (*px)++

ID>>>1) извлекаем значение на которое указывает px. *px = 4
ID>>>2) далее к 4 прибавляем 1, получаем 5. т.е. y = 5.

ID>>>Вопрос: почему принт эфом выводится значение 4?

LVV>>Потому что это — постфиксный инкремент. В этом случае сначала выполняется присваивание, а потом увеличение значения. В н попадает неувеличенное значение.

ID>тогда как сделать чтобы выводилось увеличенное?


y = ++(*px);
Re[3]: array pointer ( вопрос чайника)
От: LaptevVV Россия  
Дата: 02.01.10 21:35
Оценка:
Здравствуйте, i.dmitry, Вы писали:

ID>что-то я совсем запутался.

ID>
ID>    int a = 5;
ID>    int *pa = &a;
ID>    int b;

ID>    b = (*pa)++;
ID>    cout<<(*pa)++;
ID>    cout<<b;
ID>

ID>почему в первом cout выводится 6, а во втором 5?
Потому что это то же самое, что и:
int a = 5;
int b;
b = a++;               // b=5, a=6
cout << a++;           // выводит а=6 и после этого а=7
cout << b;             // выводит b=5

Дело в постфиксном инкременте, а вовсе не в указателе.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re: array pointer ( вопрос чайника)
От: rg45 СССР  
Дата: 02.01.10 22:58
Оценка:
Здравствуйте, i.dmitry, Вы писали:

[Offtop] Раз уж разбираешься с массивами и указателями, то обрати сразу внимание на разницу между массивом, указателем и указателем на массив. Эти три понятия хоть и из одной пьессы, но, все же, это три разных "персонажа". А, судя по тому как ты выбрал название для темы, четкого понимания этого вопроса у тебя пока еще нет.
--
Справедливость выше закона. А человечность выше справедливости.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.