>> C言語入門トップに戻る

関数にポインタを渡す

今回は、関数にポインタを渡す方法についてご紹介します。
全然難しくありません。
ポインタが理解できていれば簡単です。
下記のコードを見てください。

#include <stdio.h>

void func(int*,int);

int main(void){
	
	
	int test;

	//ポインタを渡すだけ。
	func(&test,10);


	printf("%d\n",test);

	return 0;

}

void func(int *temp,int figure){

	*temp=figure*5;
}

これを実行すると「50」と表示されます。
今まで関数を実行して値を受け取りたいときはどうしていたでしょうか?
戻り値を返して受け取っています。
ですが、いちいちそんな面倒なことをしなくても、アドレスやポインタを渡して値を書き換えてもらえば
簡単にできます。

上記のコードでまず変数testを宣言しています。
次にfunc関数の第一引数にそのアドレスを渡しています。第二引数には10を渡してます。
func関数を見てください。

*temp = figure * 5

と書いて、第二引数に渡した数字*5の値を、渡したアドレスを読み込んで書き換えています。
渡されたアドレスにアスタリスクを付加することによって、
読み込んだり書き換えたりすることができるのは覚えてますよね?
その方法で書き換えてます。
これでfunc関数では戻り値を戻さずに値を書き換えることができました。
printfで表示してみると、ちゃんと50と表示されてますよね?

今の方法はアドレスを渡して実行しましたが、
ポインタ変数を使う場合は以下の通りです。

include <stdio.h>

void func(int*,int);

int main(void){
	
	
	int test;

	int *point;

	//変数テストのアドレスを代入。
	point=&test;

	//ポインタを渡すだけ。
	func(point,10);


	printf("%d\n",test);

	return 0;

}

void func(int *temp,int figure){

	*temp=figure*5;
}

ただ、別でポインタ変数を宣言して、変数testのアドレスを代入し、
そのポインタをfunc関数に渡してるだけです。
わかりますよね?

このようにポインタ変数をうまく利用すれば、
不要は変数を使う必要がなくなり、コードをすっきりさせることができます。

次回は関数の引数に配列を渡す場合について説明します。


>> 【関数に配列を渡す】に進む
>> C言語入門トップに戻る