&演算子、*演算子、NULLポインタ、swap関数の理解度を確認しましょう。
int a = 42; int *p = &a; printf("%d\n", *p);
p は a のアドレスを持つポインタ。*p で p が指す先の値 = a の値 = 42 を取得します。int a = 10; int *p = &a; *p = 20; printf("a = %d\n", a);
*p = 20 は p が指す先(= a)に 20 を代入。a の値が書き換わるので a = 20。int *p = NULL; printf("%d\n", *p);
void swap(int *a, int *b) { int tmp = *a; *a = *b; *b = tmp; } int main(void) { int x = 3, y = 7; swap(&x, &y); printf("x=%d, y=%d\n", x, y); return 0; }
*a = x, *b = y なので、tmp=3, *a=7, *b=3。