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

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

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

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

Похожие вопросы
АО НПП «АМЭ» Санкт-Петербург
До 250 000 ₽
Uniscan Research Новосибирск
от 140 000 до 200 000 ₽
Базис-Центр Коломна
от 70 000 до 500 000 ₽