• ベストアンサー

C言語の初歩的な質問

質問1----------------------------------------- #include<stdio.h> int main() {  int a;  char b[10];  for(int i = 0;i < 2;i++){   scanf("%d",&a);   printf("整数%d\n",a);  }  scanf("%s",b);  printf("文字列%s\n",b); } /* この際に、例えばabと入力すると結果が 整数-858993460 整数-858993460 文字列ab となり整数入力を無視して進められるのはなぜでしょうか? */ 質問2----------------------------------------- #include<stdio.h> void func(int**); int main() {  int *p;  func(&p);  printf("%d",*p); } void func(int **pp) {  int n = 10;  *pp = &n; } /* func関数のnはスコープからはずれて変数の寿命がなくなるはずなのにprintfで表示されるのはなぜでしょうか? */ ---------------------------------------------- C言語は一冊の本とネットの入門サイトをかじった程度の理解です。

質問者が選んだベストアンサー

  • ベストアンサー
  • jacta
  • ベストアンサー率26% (845/3158)
回答No.1

> この際に、例えばabと入力すると結果が > 整数-858993460 > 整数-858993460 > 文字列ab > となり整数入力を無視して進められるのはなぜでしょうか? scanfの仕様です。 > func関数のnはスコープからはずれて変数の寿命がなくなるはずなのにprintfで表示されるのはなぜでしょうか? 未定義の動作ですので、たまたまそうなっただけです。

ahys
質問者

お礼

回答ありがとうございました。 参考になりました。

その他の回答 (2)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

上の方だけ #1 の補足: scanf の仕様で「変換できなかったら無視して終了」です. 「ab」という入力は整数にできないので, この入力は見なかったことにして scanf は返ってきます. 当然, 入力に残ったままなので結果的に「無視された」ように見えます. このことは scanf の返り値をちゃんと確認すればわかる.

ahys
質問者

お礼

回答ありがとうございました。 仕様とのことで、そう覚えるしかないみたいですね。

  • a987654
  • ベストアンサー率26% (112/415)
回答No.2

>質問1  &a は何を指しているのでしょうか? C言語は一冊の本にaのアドレスとと書かれていませんでしょうか? すなわちコンパイルじに変数aに割りつけられたアドレスそのものです。 >質問2 >寿命がなくなるはず なんで? 必ず &n すなわち変数nのアドレスが返されます。 参考までに http://www9.plala.or.jp/sgwr-t/c/sec10-2.html

ahys
質問者

お礼

回答ありがとうございました。 読解力の不足のせいか、いまいち仰られていることが理解できませんでした。 申し訳ありません。

関連するQ&A