1

私のプログラムは以下のとおりです。

#include<stdio.h>
main()
{
  int x=30,*y,*z;
  y=&x;
  z=y;
  *y++=*z++;  //what does this mean?
  x++;          
  printf("%d %d",y,z);  
  return 0;
}

このステートメントの意味は何ですか:*y++=*z++

4

8 に答える 8

3

これは次と同等です。

*y = *z;
y++;
z++;

このプログラムの出力がわかりません

あなたはポインタを印刷しているので、理解することはあまりありません。


  • ポインタを印刷するとき%pの代わりに使用する必要があります%d
  • それらのポインターをインクリメントすると、既知の宇宙を超えて移動します
于 2012-08-15T06:54:53.930 に答える
3

yzはポインタであり、式y++z++は接尾辞演算子を使用しているため、両方の増分は代入後に発生します。

このステートメントは3つのことを行います。

  1. y:が指すのと同じ値が指す値に割り当てzます*y = *z
  2. yポインタをインクリメントします。ここで、メモリ内のyを指します。 int
  3. zポインタをインクリメントします。ここで、メモリ内のzを指します。 int

最後の2つは、ステートメントの後に使用された場合はy不適切です。そして、コードに属していない初期化されていないメモリを指します。zyz

于 2012-08-15T06:57:06.393 に答える
1

*y++=*z++;z- これは、ポインタに格納されている値を に代入しているだけ*yです。yこの後、両方とzポインターがインクリメントされます。このステートメントの後、 と の両方zを逆参照するとy、クラッシュ (未定義の動作) が発生する可能性があります。

この種のステートメントは、文字列コピーの実装で使用されます

void my_strcpy(char *dest, char* src)
{
   while((*dest++ = *src++));
}
于 2012-08-15T07:08:24.173 に答える
0

それは次と同じです:

*y = *z;
++z;
++y;
于 2012-08-15T06:55:11.683 に答える
0

これは、が指すオブジェクトの値を、が指すオブジェクトの値に割り当てるだけで、y両方zのポインタをインクリメントします。

于 2012-08-15T06:55:22.790 に答える
0

yが指すオブジェクトの値をzが指すオブジェクトの値に割り当てるだけで、最後に両方のポインターがインクリメントされます。

于 2012-08-15T06:56:15.497 に答える
0

変数yzは整数へのポインターであり、この場合、変数 x のアドレスを指します。

次の行は、 の値yを のアドレスに設定しますx(つまり&x、`x のアドレスが得られます)。

y=&x;
z=y

次の行*y++=*z++;は正確には意味がなく、使用するコンパイラによってはコンパイルできる場合とできない場合があります。GCC 4.3.2 の場合、次のエラーが発生します。

foo.c:7: error: invalid operands to binary * (have ‘int *’ and ‘int *’)

ポインター演算を実行しようとしているようですが、演算子の優先順位が少し混乱しています。zプレインクリメント値をロケーションに割り当てた後、が指す値をインクリメントしようとしていますか?

于 2012-08-15T07:07:02.113 に答える
0
*y++=*z++;  //wat  does this mean?

上記は、未定義の動作 (次のシーケンス ポイントの前に複数の変更) をもたらします。

于 2012-08-15T11:58:34.020 に答える