728x90

연재 완료/C Lang 이론 22

C언어 이론 10. 전처리기(#include~#endif)

내용 출처 : YES C (정보공학연구소 /생능출판사) 혼자 연구하는 C/C++ (SoEn.kr /와우북스) Ⅰ. 전처리기(preprocessor) ① 원시코드가 컴파일되기 전에 C언어의 문법과는 독립적으로 실행시켜 매크로 문장이 있으면 정의된 문장으로 치환해주는 역할을 담당하는 것 ② 컴파일하기 전에 코드를 변경시켜주는 역할을 수행하기에 기계어로 번역되지는 않는다. ③ 전처리문은 #으로 시작하고, 다른 문장과는 달리 끝에 ;를 붙이지 않는다. ④ 전처리문은 한행에 하나씩 써야하고, 뒤에 주석을 제외한 다른 것이 올 수 없다. ⑤ 전처리기의 종류와 기본적인 역할은 다음과 같다. (일부분이다. 다음 포스트에서 나머지를 다룰예정이다.) 종류 기능 #include 지정파일을 원시 프로그램에 포함시킨다. #de..

C언어 이론 9. 구조체 및 공용체 (공용체, 열거형)

내용 출처 : YES C (정보공학연구소 /생능출판사) 혼자 연구하는 C/C++ (SoEn.kr /와우북스) Ⅰ. 공용체 (union) ① 여러 자료형의 원소들이 공통으로 사용할 수 있는 기억장소를 정의하고, 한번에 하나의 멤버의 값만 저장하는 자료형. ② 구조체와 유사하여 구조체에서 사용하는 연산자를 그대로 사용한다. ③ 구조체를 선언하는 기본적인 방식은 다음과 같다. 구조체에서의 4가지 바리에이션을 다 적용할 수 있다. union { }; 예시 ) ④ 공용체의 이름 또한 구조체 이름처럼 하나의 타입으로 취급된다. ⑤ 공용체 또한 변수를 선언하면서 초기화 할 수 있지만 첫 요소만 가능하다. ⑥ 공용체는 주로 논리적으로 유사한 값에 대해서 사용한다. Ⅱ. 이름 없는 공용체 ① 공용체에 공용체 이름도 지정..

C언어 이론 9. 구조체 및 공용체 (동적할당)

내용 출처 : YES C (정보공학연구소 /생능출판사) 혼자 연구하는 C/C++ (SoEn.kr /와우북스) Ⅰ. 정적 할당(Static Allocation)과 동적 할당(Dynamic Allocation) ① 정적 할당은 프로그램을 작성할 때 필요한 메모리양을 미리 알려주어 컴파일러가 그 만큼 메모리를 할당하는 것을 말한다. ② 대부분의 변수들은 선언시 이러한 정적 할당의 방법으로 할당되며 배열도 그러하기에 배열의 크기에는 상수값만 올 수 있다. ③ 하지만 프로그램 작성시에는 메모리가 얼마나 필요한지 전혀 알 방법이 없을 때도 있다. ④ 이럴때 사용하는 방법이 동적할당으로 이는 프로그램 실행중에 필요한 만큼의 메모리를 할당하는 것을 의미한다. Ⅱ. 메모리 관리 원칙 ① 현재의 32비트 이상의 시스템에서..

C언어 이론 8. 포인터 (배열과 포인터)

내용 출처 : YES C (정보공학연구소 /생능출판사) 혼자 연구하는 C/C++ (SoEn.kr /와우북스) Ⅰ. 배열과 포인터 ① 임의의 자료형 T가 있으면 T형 배열도 T형 포인터도 언제나 선언할 수 있다. ② C언어 내부적으로는 모든 배열은 메모리에 순차적으로 저장된다. ③ 즉, n차원 배열도 내부적으로는 배열의 배열로 메모리에는 순차적으로 저장되어 있다. ④ 배열의 이름은 배열의 시작 위치를 가리키는 포인터 상수이다. ⑤ 정수 포인터에서 1을 더하면 현재 가리키고 있는 주소에서 정수 사이즈만큼 이동한 곳을 가리킨다. ⑥ 포인터들의 배열도, 배열의 포인터도 가능하다. (①에 의해서) ⑦ n차원 배열에서도 포인트의 가감연산만으로 배열의 모든 요소를 참조할 수 있다. (② ~ ⑤에 의해서) Ⅱ. [ ]..

C언어 이론 8. 포인터 (void포인터와 NULL포인터, 함수 포인터)

내용 출처 : YES C (정보공학연구소 /생능출판사) 혼자 연구하는 C/C++ (SoEn.kr /와우북스) Ⅰ. void* vp; ① void형은 함수의 리턴타입이 없을때 혹은 포인터에만 사용할 수 있는 특수한 타입이다. ② void* vp;의 형태로 void형 포인터를 선언할 수 있다. ③ void* vp;는 대상체가 정해져 있지 않다는 뜻으로 어떤 타입이든 가리킬수 있다. ④ void* vp;는 어떤 타입의 주소든 저장할 수 있다. ex) int i; char c; void* vp; vp = &i; vp = &c; ⑤ 하지만 반대로 임의의 T형 포인터 T* tp에 void* vp는 대입할 수 없다. ⑥ int* ip;에 void* vp;를 대입하려 한다면 (int *)vp;로 캐스팅을 해야한다. e..

C언어 이론 8. 포인터 (포인터의 정의와 연산)

내용 출처 : YES C (정보공학연구소 /생능출판사) 혼자 연구하는 C/C++ (SoEn.kr /와우북스) Ⅰ. T형 포인터의 정의 ① T형 포인터는 'T형 변수가 저장된 메모리의 시작 주소를 저장하는 자료형'이다. ② 임의의 T형 변수가 있다면 언제나 T형 포인터 변수도 선언할 수 있다. ③ T형 포인터 Tp를 선언하는 문법은 예시와 같다. ex) ⑴ T* tp, ⑵ T *tp, ⑶ T * tp, ⑷ T*tp ④ ⑴은 T* 자체가 하나의 자료형이라는 관점에서 주로 쓰고, ⑵는 *tp가 포인터형 변수임을 강조할 때 주로 쓴다. ⑤ 하지만 T* tp1, tp2 로 쓴다면 tp1은 T형 포인터 변수로 선언되지만, tp2는 그냥 T형 변수로 선언된다. ⑥ 즉, 컴파일러가 T*를 하나의 자료형으로 해석하지는 ..

C언어 이론 7. 함수 (재귀함수와 main함수)

내용 출처 : YES C (정보공학연구소 /생능출판사) 혼자 연구하는 C/C++ (SoEn.kr /와우북스) Ⅰ. 재귀함수 (recurcive function) ① 함수 내에서 자기 자신을 호출하는 함수. ② 재귀 함수는 함수 내에서 사용하는 변수가 지역변수여야 하고, 값에 의한 전달 방식을 사용해야한다. ③ 재귀 호출은 지역 변수를 사용하므로 저장영역으로 스택을 사용하고 호출되어진 횟수만큼 기억장소가 배정되므로 스택 오버플로우를 주의해야한다. ④ 재귀 호출은 다른 방식에 비해 처리속도가 느리고, 기억장소를 많이 사용하기 때문에 자주 쓸 기법은 아니다. ⑤ 정렬 트리나 리스트 등의 자료구조를 다룰 때 주로 사용한다. Ⅱ. main() 함수의 원형 ① 메인함수의 가장 완전한 원형은 void(또는 int) ..

C언어 이론 7. 함수 (함수간의 데이터 전달)

내용 출처 : YES C (정보공학연구소 /생능출판사) 혼자 연구하는 C/C++ (SoEn.kr /와우북스) Ⅰ. 값을 주고받는 방식 (call by value) ① 실인수와 가인수가 별도의 기억 장소를 갖고 함수가 호출되면 실인수의 값을 가인수에 복사해서 사용하는 방식 ② 데이터 전달이 끝나면 실인수와 가인수간의 상호작용은 없으며 서로 독립적인 값을 갖는다. ③ 값을 주고 받는 방식으로는 실인수의 값을 직접 건드릴 수 없으므로 함수에서 가인수의 값을 리턴해줘야만 한다. Ⅱ. 주소를 주고받는 방식 (call by reference) ① 가인수가 실인수가 기억된 주소를 전달받아 함수 내에서 실제 실인수를 조작하는 방식. ② 함수의 실인수는 주소로 넘겨줘야 하고, 가인수는 포인터로 받아야한다. ③ 함수내에서..

C언어 이론 7. 함수 (변수의 범위)

내용 출처 : YES C (정보공학연구소 /생능출판사) 혼자 연구하는 C/C++ (SoEn.kr /와우북스) 기억 부류 (Storage Class)명칭 기억지정자 선언위치 해제시기 기억장소 통용범위 자동 초기화 지역 변수(또는 자동 변수) 없음(또는 auto) 블럭 내부 블럭 종료시 스택 선언된 블럭 내 되지 않음 전역 변수 없음 모든 블럭 외부 프로그램 종료시 정적 영역 프로그램 전체 0으로 초기화 정적 변수 static 함수 내부 프로그램 종료시 정적 영역 함수 내부 0으로 초기화 함수 외부 선언된 모듈 내에서만 사용가능한 전역변수화. 외부 모듈에서 extern 지정자로 참조할 수 없다. 외부 변수extern 모든 블럭 외부 모듈 외부에서 선언된 전역변수를 참조하고자 할 때 extern 지정자를 사용..

C언어 이론6. 문자형 배열 및 표준함수 몇가지

내용 출처 : YES C (정보공학연구소 /생능출판사) 혼자 연구하는 C/C++ (SoEn.kr /와우북스) Ⅰ. 문자열 ① C언어에는 문자열에 관한 데이터형이 따로 없고, 배열을 이용해서 문자열을 처리한다. ② 문자열을 포인터를 이용해서 처리하는 것도 가능한데, 이는 배열의 이름이 포인터 상수이기 때문이다. ③ C언어는 문자열을 배열의 요소요소에 각각의 문자를 넣고 마지막에 '\0'(NULL문자)를 넣는 것으로 처리한다. ④ 즉, 모든 문자열의 마지막에는 '\0'문자가 들어간다. 예를들어 string이라는 6글자는 's','t','r','i','n','g','\0'의 7글자 7바이트로 저장된다. ⑤ 한문자라도 ''(홀따옴표)로 묶으면 문자상수이고, ""(겹따옴표)로 묶으면 널문자가 포함된 문자열상수가 ..

반응형