模擬試験でこれを尋ねられましたが、回答は投稿されていません。コードをテストする方法はありませんが、混乱しました。答えを理解するだけでなく、その理由を教えてください。
int foo() {
int a = 1;
char b[] = "zapples";
a = *(b + 1);
if (a == 'a') return 1;
else return 0;
}
What does foo return? ____
模擬試験でこれを尋ねられましたが、回答は投稿されていません。コードをテストする方法はありませんが、混乱しました。答えを理解するだけでなく、その理由を教えてください。
int foo() {
int a = 1;
char b[] = "zapples";
a = *(b + 1);
if (a == 'a') return 1;
else return 0;
}
What does foo return? ____
彼らはあなたに C ポインターの仕組みを教えてくれましたか?
一概には答えられませんが、次のことを考えてみてください。
b
文字列「zapples」の開始アドレスを持ちます。これは がb[0]
"z" を指していることを意味します。これの別の表記法は*(b + 0)
、つまり、「アドレスb
に含まれる値で、オフセットは0
です。この情報を使用すると、 の値は何になります*(b + 1)
か?
これは、演習を解決するのに十分なはずです。
1 を返します。
ラインa = *(b + 1)
は重要なポイントです。配列の最初の要素へのポインターとして b を取り、1 を追加して 2 番目の要素を指すようにします。次に、そのアドレス「a」の値が変数に割り当てられるように逆参照されますa
。