関数での素朴な疑問。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
kerukukku1
記事: 7
登録日時: 13年前
住所: 日本

関数での素朴な疑問。

#1

投稿記事 by kerukukku1 » 13年前

Mac OS X ver.10.8で、Objective-cに触れてみたんですが、
進めて行っているうちに、関数がよくわからなくなってしまいました。



#import <Foundation/Foundation.h>

int rei(int a);

int main(int argc, const char * argv[])
{

@autoreleasepool {

// insert code here...
int n = rei(100);

NSLog(@"合計=%d", n);
}
return 0;
}

int rei(int a)
{
int goukei = a + 100 + 100;

return goukei;
}

結果:
合計=300

これなんですが、
上にある
int rei(int a)の部分なんですが、
なぜ
void rei(int a)
ではなく、intで書くんでしょうか。

多分自分が戻り値についてよく理解していないのが要因だとおもうので、
もし時間があったら戻り値についてのわかりやすい解説
(というよりintとvoidの違い?)を載せていただけるとうれしいです。
最後に編集したユーザー kerukukku1 on 2012年8月31日(金) 18:22 [ 編集 1 回目 ]

box
記事: 2002
登録日時: 14年前

Re: ポインターでの素朴な疑問。

#2

投稿記事 by box » 13年前

まず、タイトルにある「ポインターでの素朴な疑問」と、
実際の投稿内容との間には何の関係もないことを申し上げます。
ポインターに関するご質問をされてはいません。

【注記】上記の回答をした後、質問者さんご自身が投稿のタイトルを修正されたようです。
kerukukku1 さんが書きました: int n = rei(100);

int rei(int a)
{
int goukei = a + 100 + 100;

return goukei;
}
reiという関数は、引数で渡した値(今回の例では100)に200を加えた値を、呼び出し元に
『計算結果として返す』
という機能を持っています。
この、『計算結果として返す』というのが、rei関数の戻り値(今回はint型)に相当します。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

kerukukku1
記事: 7
登録日時: 13年前
住所: 日本

Re: 関数での素朴な疑問。

#3

投稿記事 by kerukukku1 » 13年前

あ、すみませんw
ポインターの勉強をしてたもんでつい書いてしまいました汗
関数に訂正しておきます。

rei関数が、引数で渡した値が今回の場合100、で
200に加えた値を呼び出し元に返す。ということは理解できました。

ですが、結局voidとintでは何が違うのでしょうか?
intでrei関数を書いた場合は、「計算結果として返す」という機能ならば、
voidで書いた場合は同じく「計算結果として返す」なのでしょうか?

non
記事: 1097
登録日時: 14年前

Re: 関数での素朴な疑問。

#4

投稿記事 by non » 13年前

kerukukku1 さんが書きました:voidで書いた場合は同じく「計算結果として返す」なのでしょうか?
voidは値を返さない関数です。
C言語は値を返さない場合でも関数というから、まぎわらしいですね。
言語によっては「手続き」とか「subプロシージャ」とか言って、「ファンクション」とは区別してますけどね。
non

アバター
雨ガエル
記事: 34
登録日時: 13年前
住所: 新潟
連絡を取る:

Re: 関数での素朴な疑問。

#5

投稿記事 by 雨ガエル » 13年前

戻り値について説明します。変数に型がありますが、関数にも型があります。
この”関数の型”は「関数の戻り値の型」です。
void型の関数は値を返しません。
したがってint rei(int a)という関数はint型の数を返します。
もしvoid rei(int a)にしてしまったら、値を返さないので、
int n = rei(100); はうまくいきません。

まとめると
int型の関数はint型の数を返す。
void型の関数は値を返さない。
です。

うまく説明できていないかも知れませんが、関数の戻り値はこんなものです。

たとえば 引数に指定した二つの数を足す、int plus(int A,int B)という関数があったとします。
この関数の中身は、
int plus(int A,int B)
{
int C = A+B;
return C;
}
です。
return C; というのは”変数Cを返す”という意味です。
返したい変数Cはint型なので、このplus関数の型はint型にします。

kerukukku1
記事: 7
登録日時: 13年前
住所: 日本

Re: 関数での素朴な疑問。

#6

投稿記事 by kerukukku1 » 13年前

>>nonさん

なるほど、voidは値を返さないということですか。
確かにこれも関数って呼ぶと紛らわしいですね笑

kerukukku1
記事: 7
登録日時: 13年前
住所: 日本

Re: 関数での素朴な疑問。

#7

投稿記事 by kerukukku1 » 13年前

>>雨ガエルさん

なるほど、
値を返さないとこのプログラムはうまく動作するはずないですね。
ということは、voidは値を返さない場合に使用するってことですね!
returnでintでつくった変数を関数に戻すということか
とてもわかりやすかったです!
皆様ありがとうございました!

閉鎖

“C言語何でも質問掲示板” へ戻る