Задать вопрос
@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;
}
  • Вопрос задан
  • 139 просмотров
Подписаться 1 Простой 2 комментария
Решения вопроса 1
wataru
@wataru
Разработчик на С++, экс-олимпиадник.
Вы там поменяли местами значкения двух переменных указателей. Поскольку переменные (указатели) переданы по значению, то вне функции ничего не поменялось.

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

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

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

Похожие вопросы