- ベストアンサー
どちらの説明をしているのかがわかりません?
http://okwave.jp/qa/q8798932.html の の中に int kansuu(int hikisuu); ←関数に引数を追加 がありますが! ”関数に引数を追加”の説明で、”関数”とは!intのことを言っているのか、それとも kansuuを言っているのかが分かりません? よろしくお願いします。
- Campus2
- お礼率47% (226/475)
- C・C++・C#
- 回答数2
- ありがとう数8
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
元の 「ここでは、関数kansuuの定義とプロトタイプ宣言に 、引数を追加しました。 の意味は、関数 int kansuu( ) に、 引数 int hikisuu を 追加しました、 という意味だと思うのですが、単に、関数のプロトタイプを追加したということだと思います。 C言語は、基本的に 前方参照なので、関数、変数などを呼び出す前にそれらの定義文があるのが前提です。 一般的には、main() は、ソースコードの最後に置かれ、そこで呼び出す関数はmain()よりも前に記述するのが多いです。そうすれば基本的に前方参照になるので、プロトタイプ宣言をいちいち記述する手間が省けます。 何らか都合で、もしくは外部で定義される関数を呼び出す時は、プロトタイプ宣言を参照される前に記述します。 単なる定義文なので、呼び出し元と先で定義が間違っていなければ、コンパイル結果に影響は与えません。 呼び出し元と先の定義がもし間違っていると、コンパイルエラー(ワーニング)になるか、コンパイルが通ったとしても、間違った計算がなされるか、暴走するかいずれかでしょう。C言語の型宣言などの非常に重要なところです。 詳しくは、C言語、前方参照(前方宣言)などを参考書などで良く調べてみてください。
その他の回答 (1)
- lv4u
- ベストアンサー率27% (1862/6715)
ネットというか、このサイトで、こんな質問をする以前に、C言語の勉強をしましょうよ。 このサイトとかみてください。 http://wisdom.sakura.ne.jp/programming/c/c26.html
お礼
ご回答まことにありがとうございました。 私の質問内容ですが! 「int kansuu(int hikisuu); ←関数に引数を追加 で ”関数に引数を追加”の説明で、”関数”とは!intのことを言っているのか、それとも kansuuを言っているのか」 今回の質問は”温故知新”が足らなかったのですが!^^ ご質問した後に、参考書を調べてところ、intは型 とありました。 なのでkansuuが関数に当たるだと思います。 紹介していただいたhttp://wisdom.sakura.ne.jp/programming/c/c26.htmlですが^^ コンパイルの順番がわかりやすいように以下へ変更しました。 #include <stdio.h> void func2() { printf("(1)番目\n"); } void func1() { printf("(2)番目 "); func2(); } int main() { func1(); printf("(3)番目\n"); func1(); return 0; } 以下結果です。 (2)番目 (1)番目 (3)番目 (2)番目 (1)番目 通常であればプログラムは上から下へ流れているのですが! funcの配置の仕方で、prinftで出力される順番を任意に変えることができるのだと分かりました。 funcの意味と使い方で少しですが、理解できました。 質問したことを後で後悔したのですが、なにか、少しでも分かることで、プラスになったと思います。
関連するQ&A
- 参考書にありますが削除しても結果は同じでした。
#include <stdio.h> int kansuu(int hikisuu); int main() { int modori; modori = kansuu(2); printf("modori = %d\n", modori); return 0; } int kansuu(int hikisuu) { printf("kansuu de hyouji\n"); return hikisuu * 2; } 以上のプログラムは参考書の内容ですが、コンパイルした結果が、 kansuu de hyouji modori = 4 です。 二行目の int kansuu(int hikisuu);がなくても、結果は同じでした。 参考書の説明では 「ここでは、関数kansuuの定義とプロトタイプ宣言に 、引数を追加しました。 引数の名前はhikisuuとして、int型の値を記憶できるようにしました。 int kansuu(int hikisuu); ←関数に引数を追加」 以上、 なぜ!参考書はint kansuu(int hikisuu);があるのかがわかりません!? よろしくお願いします。
- ベストアンサー
- C・C++・C#
- プログラムの通常の流れは上~下でコンパイルされる?
#include <stdio.h> int kansuu(int hikisuu1, int hikisuu2); int main() { int modori; modori = kansuu(2, 3); printf("modori = %d\n", modori); return 0; } int kansuu(int hikisuu1, int hikisuu2) { printf("kansuu de hyouji\n"); return hikisuu1 * hikisuu2; } 以上プログラムですが、 結果は以下です。 kansuu de hyouji modori = 6 素人の目からして! printf("modori = %d\n", modori);が 最初にあるので 以下がコンパイル結果になりそうですが!? modori = 6 kansuu de hyouji この場合なぜ! kansuu de hyouji が最初になるのでしょうか!? よろしくお願いします。
- ベストアンサー
- C・C++・C#
- ・関数内で宣言された変数の扱い(C入門本の説明で)
以下C言語入門書の説明ですが! いまいちわかりません? ・関数内で宣言された変数の扱い 関数内で宣言した関数は、その関数内でのみ有効な変数になります。関数が異なれば、同じ変 数名で宣言することができます。例えば、main関数と(?)kansuu関数で、同じ(?)hennsuuという名 前の変数を宣言することができます。 int main() { int (A)hensuu = 0; (B)kansuuu(1); } int (C)kansuu(int hikusuu) { int (D)hensuu = 10; } 列のmain関数で宣言されている(?)hensuuと、さ(?)kansuu関数で宣言されている(?)hensuuは 同じ名前ですが、独立した異なるものです。(?)kansuu関数が実行されているときに、(?)hensuuの値 を変更しても、main関数で宣言されている(?)hensuuの値は変更されません。 また、(?)kansuu関数を実行している間だけ、(?)kansuu関数で宣言されている(?)hensuuが有効です。 (?)kansuu関数から呼び出し元でるmain関数に戻った際は、(?) kansuu関数で宣言した (?)hensuuはもう有効ではなくな、値を参照することもなくなります。 以上の説目で、 (A)hensuu、 (B)kansuuu、(C)kansuu、(D)hensuu (アルファベット)を分かりやすいよう追加しました。 説明の (?)にプログラムの(A)~(D)をつけたらどうなるか知りたいです。 (何となくわかるですが?) よろしくお願いします。
- ベストアンサー
- C・C++・C#
- プログラムの関係を知りたい。
http://okwave.jp/qa/q8815474.html のプログラムの中に return hikisuu1 * hikisuu2;の戻り値が printf("modori = %d\n", modori);のmodori に反映されるのはなぜですか! その過程を御説明できる方、御られますか!? 質問内容に不備がありましたら、ご了承ください。 以上宜しくお願いします。
- ベストアンサー
- C・C++・C#
- 関数の引数って。。
引数ってその関数の中だけに作用するもので、 そもそも変数とは違うものですよね? ////sample/////////// insuu = 100; function kansuu(insuu){ x = insuu; } kansuu(200); document.write(x); ////////////////////// のようにしたら、200と表示されて、エラーも出なかったわけですが、 引数と変数って無関係ってことですか?
- ベストアンサー
- JavaScript
- 引数を持つ関数を呼び出す際には、引数を指定する必要
http://okwave.jp/qa/q8815474.html 以上のプログラム内に 「引数を持つ関数を呼び出す際には、引数を指定する必要がある」 が 当てはまる箇所がありますか? もしありましたら、どこのプログラム事を言っているのでしょうか? よろしくお願いします。
- ベストアンサー
- C・C++・C#
- String typeの引数をつかって 変数はつくれますか?
いつもお世話になっております。 以下のように、引数を使って、変数をていぎしたいのですが。。。 public static void main(Stirng[] arg){ String hikisuu = "サンプル"; method(hikusuu); } public static void method(String hikisuu){ int hikisuu = 5; } java でこのようなことは可能でしょうか? (実際やったらエラーが出ました...) ほかの方法で、これと同じようなことを実現でくる方法はありますでしょうか? よろしくおねがいします。
- ベストアンサー
- Java
- スタックを用いたプログラム
http://okwave.jp/qa4433705.html 先日教えて戴いた事でスタックがどういったものなのかは わかりましたが、実際にプログラムを作ってみると、 なかなかうまくいけません。再びアドバイスを戴ければと思ってます。 <プログラムの仕様> 入力数値をスタックに格納し'a'が入力されたら、 スタックに格納されている数値を全て取り出し、 平均値を出力するプログラム ・スタックは、push()関数およびpop()関数を実装する ・スタックへの要素の追加はpush()関数で行う ・スタックからの要素の取出はpop()関数で行う ・スタックのサイズは任意とする int push(int push_data); 引数: スタックに追加するデータ 戻り値: 成功の場合1、失敗の場合0を返す int pop(int *pop_data); 引数: スタックから取り出した値を格納するポインタ 戻り値: 成功の場合1、失敗の場合0を返す いざ、自分で作ってみると、 仕様通りには全く作れず、結局main関数ですべてを作って しまうことになってしまいます・・
- ベストアンサー
- C・C++・C#
- プロトタイプ宣言の説明
プロトタイプ宣言でkansu(int a, int b[][3], *p,*q)と表現したときこれを説明してほしいのですが、どう説明したらいいでしょうか。できるだけ詳しく解説してほしいのですが、よろしくお願いいたします。 あとdouble型でscanfを使うときは%lfを使うのに対しprintf関数で使うときは%fと教科書に表現されていたのですが、%lfにしてはいけないのでしょうか。
- ベストアンサー
- C・C++・C#
お礼
ご回答まことにありがとうございました。 質問した内容がレベル的に低い内容でしたので”しまった”と思ったのですが! ご回答が、拡張されたご回答でしたので、何かと勉強になりました。 なので、 何か得るものはありました。 ご回答してくださった内容は私なりに吟味しましたが! まー私のレベルだと半分も理解するにも、まだまだ!ほど遠いレベルでした ハードルが高いですが、めげずに頑張れば、いつかは、花輪咲くでしょう。 ”前方宣言”を参考書数冊とネットで調べましたが、何となくわかるぐらいです。
補足
ご回答まことにありがとうございます。 せっかく、ご回答をくださったので、軽く流すのではなくて、しっかり読みたいと思います。 ご返事までには、しばらくお待ちくださいませ^^