@krot0glot

Как работать с указателями?

Объясните, пожалуйста, почему не работает tswap.
Я Не понимаю, почему для изменения указателей требуется разыменование как в swap.

#include <stdio.h>
#include <stdlib.h>

void swap ( int* p_first, int* p_second )
{
    int tmp = *p_first;
    *p_first = *p_second;
    *p_second = tmp;
}

void tswap ( int* p_first, int* p_second )
{
    int* tmp = p_first;
    p_first = p_second;
    p_second = tmp;
}

int main ( void )
{
    int a = 10,
        b = 20,
        * pa = &a,
        * pb = &b;

    printf ( "\na = %d, b = %d", a, b );
    swap ( pa, pb );
    printf ( "\na = %d, b = %d", a, b );
    tswap ( pa, pb );
    printf ( "\na = %d, b = %d", a, b );


    return EXIT_SUCCESS;
}
  • Вопрос задан
  • 128 просмотров
Решения вопроса 1
wataru
@wataru
Разработчик на С++, экс-олимпиадник.
Вы там поменяли местами значкения двух переменных указателей. Поскольку переменные (указатели) переданы по значению, то вне функции ничего не поменялось.

Вы же менянте местами значения int, значит временная переменная tmp должна быть int, а указатели надо разименовывать.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
CityCat4
@CityCat4
Внимание! Изменился адрес почты!
А, простите, чего хотели-то? Передали в функцию два указателя, поменяли первый со вторым, ничего с данными по указанным адресам не сделали - ничего и не поменялось :)

Указатель содержит адрес. Чтобы поменять данные - нужно считать данные по адресу.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы