2016-12-04 2 views
0

Я пытаюсь поменять значения двух целых чисел, используя указатели, см код ниже:Перестановка двух целых чисел, используя указатели

void swapArgs(int *a, int *b) { 

    int *temp = &b;           
    b = &a;            
    a = &temp;            
    printf("Swapped Arguments: A=%d, B=%d\n", *a, *b);   
} 

Когда Printf выполняется, результирующие значения являются огромными числами. Может ли кто-нибудь объяснить мне, что не так с моим кодом? Еще новичок в указателях.

ответ

5

Проблема заключается в том, что вам необходимо скопировать значения, а не указатели:

int temp = *b; 
*b = *a; 
*a = temp; 

Примечание: Ваш код назначая указатели неправильного типа - &a является int**, а b является int* (т.е. количество звездочек не совпадает). Ваш компилятор должен был предупредить вас об этом. Их исправление устранит проблему.

+0

Удивительное спасибо. Итак, моя проблема заключалась в том, что я назначал целочисленные переменные равными адресам, а не фактическим значениям? – Froobyflake

+0

@Froobyflake Да, в этом проблема. – dasblinkenlight

+0

Мне нравится, читая ваши ответы, дорогой ценитель @dasblinkenlight – snr

1

Помните, что ваш a и b уже указатели - так внутри функции вы не должны использовать (адрес оператора) &, вместо этого вы должны использовать (оператор разыменования) *:

int temp = *b; 
*b = *a;            
*a = temp; 
Смежные вопросы