본문 바로가기

BackEnd/C

구조체의 추가적인 특성과 메모리 관계 1. 구조체 변수도 구조체의 멤버가 될 수 있다. 12345678910111213141516171819202122232425262728293031323334#include #define PI 3.14 typedef struct __point{ double xPos; double yPos;} point; typedef struct __circle{ point center; // 원의 중심 double rad; // 반지름} circle; void ShowCircleInfo(const circle * ptr){ printf("원의 중심: [%g, %g] \n", (ptr->center).xPos, (ptr->center).yPos); printf("원의 넓이: %g \n", (ptr->rad)*(ptr->r..
구조체 배열 구조체도 배열의 형태로 선언이 가능하다. 기본 자료형의 배열 선언방식과 동일하다. 1234567891011121314151617181920212223242526272829303132333435#include #define ARRY_LEN 3#define NAME_LEN 30#define PID_LEN 15 typedef struct __person{ char name[NAME_LEN]; char ID[PID_LEN]; unsigned int age; } person; void ShowPersonData(person * ptr); int main(void){ int i; person personArr[ARRY_LEN]={ {"한종수", "900218-1012589", 20}, {"이성은", "910218-..
구조체의 정의에 포함되는 typedef 선언 구조체의 정의와 typedef 선언을 한방에 1234567struct _person{ char name[NAME_LEN]; char ID[PID_LEN]; unsigned int age;}; typedef struct _person person;cs 위와 아래는 같은 선언방식이다. 아래 방식이 더 간결하다. 이것은 약속이니 익숙해지자. 123456typedef struct _person{ char name[NAME_LEN]; char ID[PID_LEN]; unsigned int age;}person;cs
구조체 변수로 가능한것과 불가능한 것 1. 구조체 변수로 가능한것과 불가능한 것 구조체 변수의 활용방법은 일반변수와 크게 차이가 없다. 변수로 가능한 대부분의 일이 가능하다. 1) 함수의 인자로 전달도 가능하다. 2) 반환도 가능하다. 3) 대입 연산의 피연산자로도 사용이 가능하다. 4) 단 사칙연산은 불가능하다. 1234567891011121314151617181920212223242526272829#include struct __point{ double xPos; double yPos;};typedef struct __point point; point IncrePos(point pnt){ pnt.xPos++; pnt.yPos++; return pnt;} int main(void){ point p1, p2, p3; p1.xPos=0.5; ..
구조체의 정의 1. 구조체의 정의 예를 들어 하나의 구조체를 정의 해보겠다. 그룹을 지어줘야 하는 데이터 x좌표 정보와 y좌표 정보가 있다면, 이들 각각을 저장 하기 위한 변 수의 이름을 xPos, yPos라 해보자. 그리고 이들은 모두 double형으로 선언한다고 가정해 보자. 그렇다면 위의 두 변수를 묶어서 관리할 수 있어야 하는데, 이 때 필요한 것이 구조체이며 구조체 를 기반으로 두 변수를 묶으면 위와 같은 형태가 된다. xPos, yPos를 묶어서 하나의 자료형을 구 성한 것이다. 그리고 키워드 struct는 이것이 구조체의 정의가 되도록 한다. 만약에 struct가 아닌 다른 키워드가 온다면, 이는 구조체가 아닌 또 다른 형태의 정의가 된다. 그리고 point라는 이름 은 구조체의 이름이며, 변수의 선언에 ..
구조체의 필요성 구조체의 필요성 표현하는 데이터들은 그룹을 형성하게 되기 때문에 구초제가 만들어지게 된것이다. 예를 들어 주소록 관리 프로그램을 구현해야한다면 이름, 주소, 전화번호가 필요하고 도서 관리 프로그램을 구현해야 한다면, 제목, 정가, 출판사등이 필요하다. 이와 같은 데이터들이 그룹을 형성하게 된다. 이렇게 그룹을 형성하는 데이터들을 묶어서 관리할 수 있다면, 프로그램 내에서 데이터들을 관리 하기가 한결 수월해진다. 그래서 이러한 목적으로 디자인 된 것이 바로 구조체이다.
대표적인 선행처리 명령문 1. #define : Object-like macro 앞서 정의한 #define 명령문을 다시 한번 보자. 위 그림에서 보여주듯이 선행처리 명령문은 기본적으로 세 부분으로 나뉘는데, 제일 먼저 등장하는 #define을 가리켜 ‘지시자’라 한다. 선행처리기가 이 부분을 보고 지시하는 바를 파악하기 때문에 지시자라 하는 것이다. 그리고 앞서 설명했듯이 #define 지시자는 선행처리기에게 다음과 같은 내용을 지시한다. 이어서 등장하는 매크로를 마지막에 등장하는 매크로 몸체로 치환하라. 그리고 #define 지시자 뒤에 등장하는 것을 가리켜 ‘매크로’라 하고, 그 뒤를 이어서 등장하는 것 을 가리켜 ‘매크로 몸체(또는 대체 리스트)’라 한다. 따라서 위의 선행처리 명령문은 다음의 내용 을 선행처리기에게 지시..
전처리기(Preprocessor)와 매크로 1. 전처리란? 전처리는 선행처리를 의미한다. 여기서 말하는 ‘선행’이란,컴파일 이전을 의미한다. 즉 소스코드 는 컴파일러에 의해서 컴파일 되기 이전에, 선행처리기라는 것에 의해서 선행처리 과정을 거치게 된다. 2. 선행처리기가 하는 일은? 선행처리기가 하는 일은 삽입해놓은 선행처리 명령문대로 소스코드의 일부를 수정할 뿐인데 여기서 말하는 수정이란, 단순 치환의 형태를 띠는 경우가 대부분이다. 예를 들어보겠다. 다음은 가장 간단한 선행처리 명령문이다. #define PI 3.14 이처럼 선행처리 명령문은 # 문자로 시작을 하며, 컴파일러가 아닌 선행처리기에 의해서 처리되는 문장이기 때문에 명령어의 끝에 세미콜론을 붙이지 않는다. 그리고 이렇게 구성이 된 명령문은 선 행처리기에게 다음과 같은 메시지를 전달..