-1

模擬試験でこれを尋ねられましたが、回答は投稿されていません。コードをテストする方法はありませんが、混乱しました。答えを理解するだけでなく、その理由を教えてください。

int foo() {
    int a = 1;
    char b[] = "zapples";
    a = *(b + 1);
    if (a == 'a') return 1;
    else return 0;
}
What does foo return? ____ 
4

2 に答える 2

1

彼らはあなたに C ポインターの仕組みを教えてくれましたか?

一概には答えられませんが、次のことを考えてみてください。

b文字列「zapples」の開始アドレスを持ちます。これは がb[0]"z" を指していることを意味します。これの別の表記法は*(b + 0)、つまり、「アドレスbに含まれる値で、オフセットは0です。この情報を使用すると、 の値は何になります*(b + 1)か?

これは、演習を解決するのに十分なはずです。

于 2012-04-29T17:45:24.880 に答える
0

1 を返します。

ラインa = *(b + 1)は重要なポイントです。配列の最初の要素へのポインターとして b を取り、1 を追加して 2 番目の要素を指すようにします。次に、そのアドレス「a」の値が変数に割り当てられるように逆参照されますa

于 2012-04-29T17:45:25.410 に答える