2019년 7월 1일 월요일

[컴퓨터공학]프로그래밍#15(구조체)

*구조체
여러 종류의 변수를 모아서 새로운 데이터 타입 정의
하나의 주제로 연관된 여러 개의 데이터를 모아서 사용할 때 유용
학생정보, 도서정보, 생산제품정보 등 여러가지 데이터가 하나의 정보가 되는 경우 사용함

*구조체 선언
생성하고자 하는 구조체의 타입을 선언함
선언하고자 하는 구조체의 이름과 구조체 내에 포함하고 싶은 변수를 선언
구조체 선언은 컴파일러에게 구조체 정보를 알려 주는 것
실제 메모리에 생성되지 않음 (실제 생성은 구조체 변수 정의에서 생성됨)

*구조체 변수 정의 및 사용
구조체 변수 정의
실제 코드상에서 구조체를 사용하기 위해서는 구조체 변수를 정의해야 함
struct student s1 = {“Jin”, 0x12345678, “aa”};

구조체 변수 사용
s1.name[0] = ‘H’;
s1.studentId = 20196502;
printf(“%s”, s1.email);

*구조체의 활용
1.여러 개의 관련된 데이터를 하나로 묶음
관련된 데이터를 하나로 묶으면 관리 및 사용하기 편리함
10명의 학생 정보를 배열을 사용하는 경우
학생 1명의 정보가 하나의 구조체로 묶여 있어 이해가 편리함
배열을 사용하는 경우 배열의 인덱스가 몇 번째 학생인지를 결정하며, 정보 입 력 및 사용시 항상 주의해야함

2.여러가지 데이터 정보를 함수 파라미터로 전달할 때 구조체 활용
10개의 int 형 변수를 전달하려면 10개의 파라미터를 기입해야 함
10개의 변수를 1개 구조체로 생성하여 전달하면 파라미터 개수를 줄일 수 있음
일반적으로 구조체로 묶이는 변수는 서로 연관관계가 있는 변수임
Call by reference (주소 전달 방식), call by value (값 전달 방식) 을 쉽게 선택하여 다수의 변수를 전달할 수 있음
구조체 변수를 복사 방식으로 전달 가능
➢ void func(struct student a);
구조체 변수를 주소 전달 방식으로 전달 가능
➢ void func(struct student *a);
구조체 내에 배열이 있는 경우도 복사 방식 전달 가능함
➢ 구조체가 아닌 경우 항상 주소만 복사함

3.Linked list 등 고급 데이터 표현 방식 사용시 활용
많은 정보를 효율적으로 저장하고 사용하기 위해서는 linked list 등과 같은 고급 데이터 표현 방식을 사용함
일반적으로 배열은 프로그램 실행 도중 필요에 따라 크기를 증가시키거나 축소하기 어려움
이와 같은 문제를 해결하기 위해 구조체를 이용하여, 새로운 데이터 추가가 필요한 경우 메모리에서 구조체를 만큼 메모리를 할당 받아 기존의 데이터 에 연결함 (Linked list)
사용이 종료된 데이터는 list 에서 연결을 끊고, 해당 구조체용 메모리를 운 영체제에 반납함

*함수로 구조체 전달 예제

댓글 없음:

댓글 쓰기