Я пытаюсь лучше понять указатели и ссылки на C, и мой курс предоставил следующую программу в качестве примера.Понимание указателей с программой обмена в C
#include <stdio.h>
void swap(int* a, int* b);
int main(void)
{
int x = 1;
int y = 2;
swap(&x, &y);
printf("x is %i\n", x);
printf("y is %i\n", y);
}
void swap(int* a, int* b)
{
int tmp = *a;
*a = *b;
*b = tmp;
}
Я поплелся вместе следующее, чтобы увидеть, если это поможет мне лучше понять, что происходит, главным образом, в отношении к необходимости использования & против * (разыменования). В принципе, синтаксис объявления указателя на тип int (int * a) по сравнению с использованием звездочки для «разыменования» (* a = * b) довольно запутанный для меня, и я надеялся, что кто-то сможет просветить меня. Вот еще одна версия выше, чем я думал, что помогло бы уточнить, но на самом деле не:
#include <stdio.h>
void swap(int* a, int* b);
int main(void)
{
int x = 1;
int y = 2;
int *a = &x;
int *b = &y;
swap(a, b);
printf("x is %i\n", x);
printf("y is %i\n", y);
}
void swap(int* a, int* b)
{
int tmp = *a;
*a = *b;
*b = tmp;
}
Короче говоря, мой вопрос, есть ли функциональное различие между тем, что эти две программы делают? В чем разница между разыменованием (*a = *b
) по сравнению с использованием &
оператора (*a = &x
)».
Ах, нажмите! Спасибо! –
Если это помогает понять, напишите 'int * x' вместо' int * x' –