[C基礎-構造と関数]



構造体と関数


関数とプログラムは密接な関係である.

こうぞうたいでんたつ


構造体をパラメータとして渡すには2つの方法がある.ポインタで伝達し、構造体に従って伝達する.
構造体の場合、ポインタはパラメータ伝達とは異なります.構造体は多様な資料型を組み合わせた新しい資料型であるため,構造体のサイズが大きいほど必要な複製空間が大きくなる.
したがって,空間的浪費により効率が低下し,構造体をパラメータで伝達する際には通常ポインタが用いられる.
(値を変更する必要がなくても)
#include <stdio.h>

typedef struct {
	int s_id;
	int age;
} Student;

void print_student(Student s){
	s.s_id = 2000;
	s.age = 25;
	
	printf("학번 : %d, 나이 : %d\n", s.s_id, s.age);
}

int main(){
	Student s;

	s.s_id = 1000;
	s.age = 20;
	
	print_student(s);
    
	printf("학번 : %d, 나이: %d\n", s.s_id, s.age);
}

しゅつりょく


学号:2000、年齢:25
学号:1000、年齢:20

出力例


print student関数の値は変更された値として出力されますが、メイン関数の値は変更されません.したがって、2番目の出力は元の値を出力します.

関数のポインタ伝達コード

#include <stdio.h>

typedef struct {
	int s_id;
	int age;
} Student;

void print_student(Student *s){
	s->s_id = 2000;
	s->age = 25;
	
	printf("학번 : %d, 나이 : %d\n", s->s_id, s->age);
}

int main(){
	Student s;

	s.s_id = 1000;
	s.age = 20;
	
	print_student(&s);
    
	printf("학번 : %d, 나이: %d\n", s.s_id, s.age);
}

しゅつりょく


学号:2000、年齢:25
学号:2000、年齢:25