関数作成
戻り値の型 関数名(型名 仮引数[,....]){処理
}
※最後の「;」は不要
例
void message(void) { printf("あんぱん たべたい\n"); }
プロトタイプ宣言と関数呼出し
プロトタイプ宣言:プログラム先頭で関数の形を宣言しておくこと。※コンパイラに自作関数の存在を教える。
例
#include <stdio.h> ←これもプロトタイプ宣言 void message(void); ←プロトタイプ宣言 int main(void) { message(); ←自作関数 呼出し return 0; } void message(void) ←自作関数 本体 { printf("あんぱん たべたい\n"); }
表示イメージ
あんぱん たべたい
引数
※カンマ区切りでいくつでもvoid message(int cnt) ←「cnt」は仮引数 { printf("%d個、あんぱん たべたい\n",cnt); }
呼出し
message(5); ←「5」は実引数
表示イメージ
5個、あんぱん たべたい
ポインタ型 引数
#include <stdio.h> void message(int* cnt); int main(void){ int kosu = 10; printf("&kosu = %p\n", &kosu); message(&kosu); printf("kosu = %d\n", kosu); return 0; } void message(int* cnt) ←「cnt」はポインタ型引数 { printf("%d個、あんぱん たべたい\n",*cnt); printf("cnt = %p\n", cnt); *cnt = 3; ←関数内でポインタ型引数を変更=元の変数kosuの中身を変更 }
表示イメージ
&kosu = 0x7ffd79c2868c
10個、あんぱん たべたい
cnt = 0x7ffd79c2868c
kosu = 3
10個、あんぱん たべたい
cnt = 0x7ffd79c2868c
kosu = 3
配列型 引数
配列の先頭のアドレスを渡す。要素数は、関数側には不明。
#include <stdio.h> void message(int cnt[]); int main(void){ int A[] = {10,20,30}; message(A); return 0; } void message(int cnt[]) { int sum = 0; for (int i = 0; i < 3; i++) { sum += cnt[i]; } printf("%d個、あんぱん たべたい\n",sum); }
表示イメージ
60個、あんぱん たべたい
構造体 引数
値渡しになる。構造体タグ+型登録
typedef struct member_kata{
int team;
int number;
char name[50];
} member;
関数
void member_print(member data){}呼出し
member data;member_print(data);
構造体型 ポインタ引数
構造体タグ+型登録
typedef struct member_kata{
int team;
int number;
char name[50];
} member;
関数
void member_print(member *data){}呼出し
member data;member_print(&data);
戻り値
戻り値は1の値のみvoid:戻り値がない
関数
int message(int cnt) ←「cnt」は仮引数 { printf("%d個、あんぱん たべたい\n",cnt); return cnt; }
呼出し
int kazu=0; kazu=message(5); ←「5」は実引数 printf("%d個もらった\n",kazu);
表示イメージ
5個、あんぱん たべたい
5個もらった
5個もらった