ここをクリックしてください。シンプルなコードの断片を混乱させてポインタを学習/理解しようとしています。なぜこのCのポインタコードは機能しませんか?
#include <stdio.h>
void swap(int *px, int *py)
{
int tmp;
tmp = *px;
*px = *py;
*py = tmp;
}
main()
{
int *a, *b;
*a = 1;
*b = 2;
swap(&a,&b);
printf("%d %d\n", *a, *b);
}
なぜ無効ですか?このコードは、逆参照演算子*
をメインから削除すると動作します。
概念的には、これはうまくいくようです。私は、それぞれint 1
とint 2
を指すポインターとしてa
とb
を初期化します。私はswap()
に自分のアドレスを送って、それは彼らが指しているものに切り替えるべきです。
http://publications.gbdirect.co.uk/c_book/chapter5/pointers.html – etuardu
すべての警告を使用してコンパイルする場合(常にそうであるはずですが)、型変換の警告が必要です。なぜなら、 &aは 'int **'です。 –