C言語関係掲示板

過去ログ

No.121.値渡しとアドレス渡しの違い


No.705

ポインタ関数
投稿者---あ(2001/12/16 20:03:14)


はじめまして
/*値を受け渡しする関数*/

#include<stdio.h>

int add_i(int,int);

main()
{
int a=10,b=20,c;

c=add_i(a,b);

printf("%d+%d=%d\n",a,b,c);
}
int add_i(int e,int f)
{
int g;

g=e+f;
return g;
}
というプログラムを関数mainとサブ関数add_iの間での引数の
やり取りをポインタ変数で行い次のようにしました。
/*値を受け渡しする関数*/

はじめまして
#include<stdio.h>

int add_i(int,int);

main()
{
int a=10,b=20,c;

c=add_i(a,b);

printf("%d+%d=%d\n",a,b,c);
}
int add_i(int e,int f)
{
int g;

g=e+f;
return g;
}
というプログラムを関数mainとサブ関数add_iの間での引数のやり取りをポインタ変数で行い次のようにしました。
/*アドレス情報を受け渡しする関数*/

#include<stdio.h>

void add_i(int*,int*,int*);

main()
{
int a=10,b=20,c;

add_i(&a,&b,&c);

printf("%d+%d=%d\n",a,b,c);
}
void add_i(int *e,int *f,int *g)
{
*g=*e+*f;
}
ここでなぜポインタを使うのかよくわかりません。アドバイスお願いします。
関数add_iをvoid add_i(int*,int*,int*)と変えました。



No.708

Re:ポインタ関数
投稿者---ともじ(2001/12/16 22:24:59)


あさん、こんばんは。

#include<stdio.h>
void add_i(int*,int*,int*);

main()
{
	int a=10,b=20,c;

	add_i(&a,&b,&c);

	printf("%d+%d=%d\n",a,b,c);
}
void add_i(int *e,int *f,int *g)
{
	*g=*e+*f; 
}

> ここでなぜポインタを使うのかよくわかりません。

値渡しとアドレス渡しの違いについては、本編の第11章をご覧に
なっていただきたいのですが、1つの戻り値を返却するだけの場合は、
最初のint add_i(int,int);の方がインタフェースとしてはよいと思います。

大量のデータを引数として渡す必要がある場合や、複数の戻り値を
返却させたい場合にはアドレス渡しは便利ですが、アドレス渡しにすると、
下位関数で上位関数が宣言した引数の内容を書き換えることが出来ます。
ですから、使わないですむのならば、使わない方がよいインタフェース
方法だと言えます。


戻る


「初心者のためのポイント学習C言語」 Last modified:2002.02.03
Copyright(c) 2000-2002 TOMOJI All Rights Reserved