#include <stdio.h>
void funcA(int x){
// スコープ外で値代入
x = 10;
}
void funcB(int* x){
// 間接参照で値を代入
x[0] = 30;
}
// funcC(int* x){
// 関数の引数に配列を指定すると↑のように勝手にint*型宣言される
void funcC(int x[3]){
// なのでパッと見スコープ外に見えるが、間接参照されている
x[0] = 50;
}
int main(void){
int a = 5;
funcA(a); // 値渡し
printf("funcA(): a=%d\n", a); // 変数aの値は5のまま
int b[3];
b[0] = 20;
funcB(&b[0]); // ポインタ渡し(配列は先頭ポインタを渡す)
printf("funcB(): b[0]=%d\n", b[0]); // 配列b[0]の値は20から30に変わる
int c[3];
c[0] = 40;
// 下記のように&と[]を省略すると、勝手に配列の先頭ポインタを渡している扱いになる
funcC(c); // ポインタ渡しになる ※「funcC(&c[0])」 と同等
printf("funcC(): c[0]=%d\n", *c); // 配列c[0]の値は40から50に変わる
printf("---------\n");
printf("funcA(): a=%d, funcB(): b[0]=%d, funcC(): c[0]=%d", a, b[0], *c);
// b[0]と*bは同じ意味
// b[整数]と*(b+整数)は同じ意味
return 0;
}