プロが教える店舗&オフィスのセキュリティ対策術

下に記述した問題の答えを教えてください。C言語です。
自分で調べたのですが、わかりませんでした。答えが分かった上で仕組みを理解したいと思っています。
できるだけ早い回答をお待ちしております。

1. 次の出力結果を見てプログラムの【空欄】を埋めよ。
#include <stdio.h>
int main(){
int *x = 【空欄】;
x += 5;
printf("%d\n", x);
return 0;
}
出力:21

2. α行からβ行までを引数が2つの文字列となる関数として、同じ動作になるように書き換えよ。関数名は任意でよい。
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main(){
char c[20] = "Hello", *d ="World";
int n = 0 //α
strcat(c, d);
while(c[n] != '\0'){
printf("%c", toupper(c[n++]));
}
printf("\n"); //β
return 0;
}

A 回答 (1件)

1) ここに書き写したときに間違っているのでなければ、問題が変です。



int x=[空欄] ;
だったとして。

21
と出力しているのは printf("%d\n", x); です。
では、ここで 21 と出力されるためにはどうなっていればいいのか?
 具体的には、xがどうなっていればいいのか?

その前で
x += 5;
となっています。
ここでどんな動作になるのか?
この行が完了したとき、上の「21と出力させるための x 」になっているはずです。
そこから逆算すれば、この行の実行前の段階での x がどうなってなければならないか、わかります。

以上をふまえて考えれば
int x=[空欄] ;
で何を初期値にしなければならないかがわかります。

「答えから仕組みを考える」のではなく「仕組みを考えてから、答えを導く」のがいいのではないでしょうか。


余談
int *x でも21と出力させることは不可能ではありませんが、少なくとも初心者向けではない使い方になります。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!