授業/C言語基礎/値渡しと参照渡し
をテンプレートにして作成
開始行:
関数に引数を渡す方法には、''値渡し''と''参照渡し''があり...
*値渡し [#b7c09ce3]
関数に値を引数として渡すと、関数は引数を記憶するための領...
つまり、呼び出された関数が受け取った引数(変数)は、関数...
これを''値渡し''といいます。
値渡しのとき、呼び出された側で受け取った引数の値を変更し...
これは、別の場所に記憶されている変数の値を変更しているだ...
次のプログラムでは、main関数がinc関数に変数 i を渡し、inc...
#geshi(c){{
/*
* 受け取った引数の値を1増やして出力する
*/
void inc(int i) {{
i++;
printf(">> %d\n", i)
}
int main(void) {
int i = 0;
inc(i); // 変数を渡す
printf("%d\n", i);
return 0;
}
}}
このプログラムを実行すると、次のようになります。
#geshi(sh){{
luna% a.out
>> 1
0
}}
*参照渡し [#m293c2f1]
関数に、変数を記憶している領域の''アドレス''(''参照'')...
参照渡しのとき、呼び出された側で受け取った引数の値を変更...
渡した引数と同じアドレスの変数にアクセスし、その値を変え...
C言語の参照渡しは、ポインター型の引数に、変数を記憶してい...
す。
ポインターとアドレスについては、C言語応用で勉強する内容な...
*配列は参照渡し [#k58a2022]
配列を関数の引数にすると、配列の要素数は無視されます。
実は、配列を宣言すると、配列名がポインター型の変数となり...
したがって、配列を関数の引数にすることは、ポインター型の...
#geshi(c){{
/*
* 受け取った配列の先頭要素の値を1増やして出力する
*/
void inc(int a[]) {{
a[0]++;
printf(">> %d\n", a[0])
}
int main(void) {
int a[] = { 0 };
inc(a); // 配列を渡す
printf("%d\n", a[0]);
return 0;
}
}}
#geshi(sh){{
luna% a.out
>> 1
1
}}
*ポインターによる参照渡し(おまけ) [#z4e2a0a3]
C言語の参照渡しは、''ポインター型''の引数に、変数を記憶し...
ポインターとアドレスについては、C言語応用で勉強する内容な...
#geshi(c){{
/*
* 参照渡しで受け取った値を1増やす
*/
void inc(int *i) {
(*i)++;
printf(">> %d\n", *i);
}
int main(void) {
int i = 0;
inc(&i); // 変数 i のアドレスを渡す
printf("%d\n", i);
return 0;
}
}}
#geshi(sh){{
luna% a.out
>> 1
1
}}
----
*まとめ [#d7dc0da7]
''値渡し''では、引数を格納するための記憶領域が新たに確保...
値渡しでは、受け取った引数の値を変更しても、引数として渡...
基本型の変数を引数として関数に渡すと値渡しになります。
''参照渡し''では、変数を格納している記憶領域のアドレスが...
参照渡しでは、受け取ったアドレスに格納されている値を変更...
配列を引数として渡すと参照渡しになります。
----
*練習問題 [#z3bcf410]
練習問題は[[こちら>授業/C言語基礎/値渡しと参照渡し/練習問...
終了行:
関数に引数を渡す方法には、''値渡し''と''参照渡し''があり...
*値渡し [#b7c09ce3]
関数に値を引数として渡すと、関数は引数を記憶するための領...
つまり、呼び出された関数が受け取った引数(変数)は、関数...
これを''値渡し''といいます。
値渡しのとき、呼び出された側で受け取った引数の値を変更し...
これは、別の場所に記憶されている変数の値を変更しているだ...
次のプログラムでは、main関数がinc関数に変数 i を渡し、inc...
#geshi(c){{
/*
* 受け取った引数の値を1増やして出力する
*/
void inc(int i) {{
i++;
printf(">> %d\n", i)
}
int main(void) {
int i = 0;
inc(i); // 変数を渡す
printf("%d\n", i);
return 0;
}
}}
このプログラムを実行すると、次のようになります。
#geshi(sh){{
luna% a.out
>> 1
0
}}
*参照渡し [#m293c2f1]
関数に、変数を記憶している領域の''アドレス''(''参照'')...
参照渡しのとき、呼び出された側で受け取った引数の値を変更...
渡した引数と同じアドレスの変数にアクセスし、その値を変え...
C言語の参照渡しは、ポインター型の引数に、変数を記憶してい...
す。
ポインターとアドレスについては、C言語応用で勉強する内容な...
*配列は参照渡し [#k58a2022]
配列を関数の引数にすると、配列の要素数は無視されます。
実は、配列を宣言すると、配列名がポインター型の変数となり...
したがって、配列を関数の引数にすることは、ポインター型の...
#geshi(c){{
/*
* 受け取った配列の先頭要素の値を1増やして出力する
*/
void inc(int a[]) {{
a[0]++;
printf(">> %d\n", a[0])
}
int main(void) {
int a[] = { 0 };
inc(a); // 配列を渡す
printf("%d\n", a[0]);
return 0;
}
}}
#geshi(sh){{
luna% a.out
>> 1
1
}}
*ポインターによる参照渡し(おまけ) [#z4e2a0a3]
C言語の参照渡しは、''ポインター型''の引数に、変数を記憶し...
ポインターとアドレスについては、C言語応用で勉強する内容な...
#geshi(c){{
/*
* 参照渡しで受け取った値を1増やす
*/
void inc(int *i) {
(*i)++;
printf(">> %d\n", *i);
}
int main(void) {
int i = 0;
inc(&i); // 変数 i のアドレスを渡す
printf("%d\n", i);
return 0;
}
}}
#geshi(sh){{
luna% a.out
>> 1
1
}}
----
*まとめ [#d7dc0da7]
''値渡し''では、引数を格納するための記憶領域が新たに確保...
値渡しでは、受け取った引数の値を変更しても、引数として渡...
基本型の変数を引数として関数に渡すと値渡しになります。
''参照渡し''では、変数を格納している記憶領域のアドレスが...
参照渡しでは、受け取ったアドレスに格納されている値を変更...
配列を引数として渡すと参照渡しになります。
----
*練習問題 [#z3bcf410]
練習問題は[[こちら>授業/C言語基礎/値渡しと参照渡し/練習問...
ページ名: