윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 22. 구조체와 사용자 정의 자료형1
윤성우의 열혈 C 프로그래밍 Chapter 22-1. 구조체란 무엇인가? 윤성우 저 열혈강의 C 프로그래밍 개정판
구조체의 정의 윤성우의 열혈 C 프로그래밍 int xpos; // 마우스의 x 좌표 int ypos; // 마우스의 y 좌표 마우스의 좌표정보를 저장하고 관리하기 위해서는 x좌표와 y좌표를 저장할 수 있는 두 개의 변수가 필요하다. xpos와 ypos는 서로 독립된 정보를 표현하지 않고 하나의 정보를 표현한다. 따라서 이 둘은 늘 함께한다. struct point // point라는 이름의 구조체 정의 { int xpos; // point 구조체를 구성하는 멤버 xpos int ypos; // point 구조체를 구성하는 멤버 ypos }; 구조체를 이용해서 xpos와 ypos를 하나로 묶었다. 이 둘을 묶어서 point라는 이름의 새로운 자료형을 정의! int가 자료형의 이름인것 처럼 point도 자료형의 이름이다. 단, 프로그래머가 정의한 자료형이기에 ‘사용자 정의 자료형(user defined data type)’이라 한다. struct person { char name[20]; // 이름 저장 char phoneNum[20]; // 전화번호 저장 int age; // 나이 저장 }; 개인의 이름과 전화번호 나이 정보를 person이라는 구조체 정의를 통해서 묶고 있다. 배열도 구조체의 멤버로 선언이 가능!
구조체 변수의 선언과 접근 윤성우의 열혈 C 프로그래밍 struct type_name val_name ; 구조체 변수선언의 기본 형태 멤버의 접근방식 struct type_name val_name ; 구조체 변수의 이름 . 구조체 멤버의 이름 struct point pos; struct person man; pos.xpos=20; printf("%s \n", man.name); 구조체 변수 pos의 멤버 xpos에 20을 저장 구조체 변수선언의 예 man의 멤버 name에 저장된 문자열 출력 구조체 변수선언의 결과
구조체 변수의 선언과 접근관련 예제1 윤성우의 열혈 C 프로그래밍 이 예제에서 호출하는 함수 sqrt는 제곱근을 반환하는 함수로써 헤더파일 math.h에 선언된 수학관련 함수이다. 실행결과
구조체 변수의 선언과 접근관련 예제2 윤성우의 열혈 C 프로그래밍 구조체의 멤버라 하더라도 일반적인 접근의 방식을 그대로 따른다. 구조체의 멤버로 배열이 선언되면 배열의 접근방식을 취하면 되고, 구조체의 멤버로 포인터 변수가 선언되면 포인터 변수의 접근방식을 취하면 된다. 실행결과
구조체 정의와 동시에 변수 선언하기 윤성우의 열혈 C 프로그래밍 point라는 이름의 구조체를 정의함과 동시에 point 구조체의 변수 pos1, pos2, pos3를 선언하는 문장이다. 위와 동일한 결과를 보이는 구조체의 정의와 변수의 선언이다. 구조체를 정의함과 동시에 변수를 선언하는 문장은 잘 사용되지 않는다. 그러나 문법적으로 지원이 되고 또 간혹 사용하는 경우도 있다.
구조체 변수의 초기화 윤성우의 열혈 C 프로그래밍 초기화 방식이 배열과 유사하다. 초기화 할 데이터들을 중괄호 안에 순서대로 나열하면 된다. . 실행결과
Chapter 22-2. 구조체와 배열 그리고 포인터 윤성우의 열혈 C 프로그래밍 Chapter 22-2. 구조체와 배열 그리고 포인터 윤성우 저 열혈강의 C 프로그래밍 개정판
구조체 배열의 선언과 접근 윤성우의 열혈 C 프로그래밍 struct point arr[4]; 선언된 배열의 형태 실행결과 길이가 4인 구조체 배열의 선언방법 선언된 배열의 형태 실행결과
구조체 배열의 초기화 윤성우의 열혈 C 프로그래밍 구조체 변수의 초기화 struct person man={"이승기", "010-1212-0001", 21}; 구조체 변수의 초기화 구조체 변수 하나를 초기화하기 위해서 하나의 중괄호를 사용하듯이... struct person arr[3]={ {"이승기", "010-1212-0001", 21}, // 첫 번째 요소의 초기화 {"정지영", "010-1313-0002", 22}, // 두 번째 요소의 초기화 {"한지수", "010-1717-0003", 19} // 세 번째 요소의 초기화 }; 구조체 배열의 초기화 구조체 배열을 초기화하기 위해서 배열요소 각각의 초기화 값을 중괄호로 묶어서 표현한다.
윤성우의 열혈 C 프로그래밍 구조체 배열의 초기화 예제 실행결과
구조체 변수와 포인터 윤성우의 열혈 C 프로그래밍 구조체 point의 포인터 변수 선언 pptr이 가리키는 구조체 변수의 멤버 xpos에 접근 pptr이 가리키는 구조체 변수의 멤버 ypos에 접근 구조체 포인터 변수를 대상으로 하는 포인터 연산 및 멤버의 접근방법 -> 연산자를 기반으로 하는 구조체 변수의 멤버 접근 방법
구조체 변수와 포인터 관련 예제 윤성우의 열혈 C 프로그래밍 실행결과 프로그래머들이 주로 사용하는 연산자이니 -> 연산자의 사용에 익숙해지자. 실행결과
포인터 변수를 구조체의 멤버로 선언하기1 윤성우의 열혈 C 프로그래밍 구조체 변수의 멤버로 구조체 포인터 변수가 선언될 수 있다! 실행결과
포인터 변수를 구조체의 멤버로 선언하기2 윤성우의 열혈 C 프로그래밍 type형 구조체 변수의 멤버로 type형 포인터 변수를 둘 수 있다. 실행결과
구조체 변수와 첫 번째 멤버의 주소 값 윤성우의 열혈 C 프로그래밍 구조체 변수의 주소 값과 구조체 변수의 첫 번째 멤버의 주소 값은 일치한다. 응용 프로그램 분야에서는 이 사실을 이용해서 프로그램을 작성하기도 한다. 실행결과
Chapter 22가 끝났습니다. 질문 있으신지요?