#include<stdio.h>
int main()
{
int a=5,*b,*c;
b=&a;
c=b;
*b++=*c++;
printf(" %d %d %d\n",&a,b,c);
}
ここで、aのアドレスがxの場合、bとcの値は両方ともx+4になります。ただし、2つの++演算子で少なくとも1つの値を8増やすべきではありません
#include<stdio.h>
int main()
{
int a=5,*b,*c;
b=&a;
c=b;
*b++=*c++;
printf(" %d %d %d\n",&a,b,c);
}
ここで、aのアドレスがxの場合、bとcの値は両方ともx+4になります。ただし、2つの++演算子で少なくとも1つの値を8増やすべきではありません
いいえ。ポインタの値とそれが指す値を混同しないでください。
この式*b++
は、bが指す値を取得してから、bの値をインクリメントすることを意味します。
%p
ではなく、ポインタ値のフォーマットに使用する必要があります%d
。
a
ここで行っているのは、ポインタを介しての値をそれ自体に設定することだけです。b
とは、インクリメント後に逆参照されない場合があることに注意してくださいc
(配列ではなく単一の値を指しているため)。
実際の値をインクリメントする場合は、括弧を使用する必要があることに注意してください。
(*b)++;
これにより、値が逆参照b
されて増分されます。括弧なしで行うと、ポインタがインクリメントされ、元の値が逆参照されます。
これを覚えておいてください
* b ++これは、bが整数を指し、整数値が2ではなく1ずつ増加していることを意味します。これは、2つの+記号で表示される場合があるためです。ポインターを出力する場合は、%p形式の指定子を使用する必要があります。 intを使用するのではなく。