[C 기초 - 구조체와 함수]

Junyeong Fred Kim·2021년 12월 6일
1

C언어

목록 보기
20/21

구조체와 함수


함수는 프로그램과 떨어질 수 없는 관계이다.

구조체 전달


구조체를 인자로 전달할 때에는 두가지 방법이 있다. 포인터로 전달하는 것과, 구조체 그대로 전달하는 것.
구조체의 경우 포인터가 매개변수로 넘겨주는 것과는 다르다. 구조체는 여러가지 자료형을 묶어서 새로운 자료형으로 만든 것이기 때문에, 구조체 크기가 커질수록 복사할 공간이 더 필요하게 된다.


따라서 공간이 낭비되어 비효율적이기 때문에, 매개변수로 구조체를 전달할 때에는 보통 포인터를 사용한다.
(값을 바꿀 필요가 없는 경우에도.)

#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 함수 내에서는 바뀐 값으로 출력되지만, main 함수에서의 값은 바뀌지 않았기 때문에 두번째 출력에서는 원래의 값 출력

포인터로 함수 전달 코드

#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

profile
기억보다 기록

0개의 댓글