Last Update 2012/07/05
関数の引数は、宣言によって次のような違いがあります。
・値として宣言
呼び出された関数内では引数のコピーを使用するため、呼び出し側の引数そのものに変更などは無い
・ポインタとして宣言
引数のアドレスがそのまま渡されるため、引数の値を変更した場合はそのまま呼び出し側でも反映される
(例)
#include <stdio.h>
void func_1(int i)
{
i++;
}
void func_2(int *i)
{
(*i)++;
}
int main ()
{
int i1 = 1;
int i2 = 2;
printf("func_1呼び出し前 i1 : %d\n", i1);
func_1(i1);
printf("func_1呼び出し後 i1 : %d\n", i1);
printf("func_2呼び出し前 i2 : %d\n", i2);
func_2(&i2);
printf("func_2呼び出し後 i2 : %d\n", i2);
return 0;
}
実行結果
func_1呼び出し前 i1 : 1
func_1呼び出し後 i1 : 1 <- 呼び出した関数内での変更は反映されない
func_2呼び出し前 i2 : 2
func_2呼び出し後 i2 : 3 <- 呼び出した関数内での変更が反映される