Programming 기초/C Language
-
C언어 기초#14 동적 메모리와 연결 리스트Programming 기초/C Language 2023. 5. 3. 19:49
* 동적 할당 메모리 프로그램이 메모리를 할당받는 방법에는 정적과 동적의 2가지 방법이 있다. 정적 메모리 할당(static memory allocation)이란 프로그램이 시작되기 전에 미리 정해진 크기의 메모리를 할당받는 것이다. 이 경우, 메모리의 크기는 프로그램이 시작하기 전에 결정되며 프로그램의 실행 도중에 크기가 변경될 수는 없다.int score_s[100]; //배열을 선언하면 정적으로 메모리 할당받는다.동적 메모리 할당(dynamic memory allocation)이란 프로그램이 실행 도중에 동적으로 메모리를 할당받는 것을 말한다. 필요한 만큼의 메모리를 할당받아 사용하고, 메모리를 반납한다.score = (int *) malloc(100*sizeof(int)); 그렇다면 동적 할당이 ..
-
C언어 기초#13 스트림과 파일 입출력 printf scanf 심화, fopen(), fclose(), 이진 파일 읽고 쓰기, 버퍼링, fseek(), rewind(), ftell(), foef()Programming 기초/C Language 2023. 5. 3. 19:20
* 스트림(stream) 스트림이란 모든 입력과 출력을 바이트(byte)들의 흐름으로 생각하는 것. 장점 : 장치 독립성. 입출력 장치에 상관없이 프로그램을 작성할 수 있다. 특징 : 버퍼(buffer) 사용. cpu의 속도가 입출력 장치보다 훨씬 빠르기 때문에 버퍼에 어느 정도 데이터가 쌓이면 cpu가 한 번에 데이터를 가져간다. 출력도 마찬가지. * 표준 입출력 스트림(standard input/output stream) 프로그램이 시작될 때 자동으로 만들어지고, 프로그램이 종료될 때 자동으로 소멸된다. 이름 스트림 연결 장치 관련 함수 예시 stdin 표준 입력 스트림 키보드 scan() stdout 표준 출력 스트림 모니터의 화면 printf() stderr 표준 오류 스트림 모니터의 화면 fpr..
-
C언어 기초#12 전처리 및 비트 필드Programming 기초/C Language 2023. 4. 28. 17:04
* 전처리기(preprocessor) 본격적으로 컴파일하기에 앞서 소스 파일을 처리하는 컴파일러의 한 부분. 전처리기는 보통 컴파일러에 포함되어 있고 자동으로 실행되며 컴파일러의 하나의 요소로 취급됨. 전처리기는 소스 파일을 처리하여 수정된 소스 파일을 생산한다. 전처리기는 몇 가지의 전처리기 지시자들을 처리한다. 이 지시자들은 #기호로 시작한다. e.g) #include 하나의 프로그램이 만들어지기까지의 과정은 위의 그림과 같다. 두 번째 단계에 해당하는 컴파일러의 내부를 살펴보면 아래 그림과 같이 전처리기와 컴파일러가 있다. (오브젝트 파일은 기계어로 번역된 파일이다.) * 단순 매크로(macro) #define 지시자를 이용하면 숫자 상수에 의미 있는 이름을 부여할 수 있다. #define 문을 이..
-
C언어 기초#11 이중포인터, 함수포인터, 배열포인터, void포인터Programming 기초/C Language 2023. 4. 18. 21:57
* 이중 포인터(double pointer) = 포인터의 포인터(pointer to pointer) **q는 *q가 가리키는 위치의 내용이다. *q는 q가 가리키는 위치의 내용이다. #include int main(void) { int i = 100;//정수 변수 선언 int* p = &i;// 포인터 p는 i를 가리킨다. int** q = &p;// 이중포인터 q는 p를 가리킨다. *p = 200;// p를 통하여 i에 200 저장 printf("i=%d\n", i); **q = 300;// q를 통하여 i에 300 저장 printf("i=%d\n", i); return 0; } ------------------------------------------------- i=200 i=300 이중 포인터가..
-
C언어 기초#10 구조체와 포인터, 공용체(union), 열거형(enum), typedefProgramming 기초/C Language 2023. 4. 15. 20:28
*구조체(structure)C에서의 자료형은 기본 자료형과 파생 자료형으로 분류할 수 있다. 기본 자료형은 char, int, double 등이 있다. 파생 자료형은 이들 기본 자료형에서 파생된 것으로 배열, 열거형, 구조체, 공용체 등을 들 수 있다. 구조체는 파생 자료형 중에서도 가장 일반적인 구조를 가진다. c언어 공식문서에서는 기본 자료형이라는 공식적인 카테고리가 없다. c언어의 type 체계는 function type과 object type이 있다. (여기서 object type은 object와 다르다.) object type은 아래와 같이 네 가지가 있다(네가지는 서로 배타적인 관계가 아니다.) 1. scalar type(int, char ...)과 pointer type 2. 구조체, 배열 ..
-
C언어 기초#9 문자열(string)Programming 기초/C Language 2023. 4. 13. 17:29
*문자열(string) 문자열은 “abc”와 같이 큰 따옴표로 표시하고 문자는 ‘a’와 같이 작은 따옴표로 표시한다. “”‘’ 가 없으면 변수의 이름으로 취급된다. ‘\0’은 NULL문자로, 아스키 코드 값이 0인 문자이다. (NULL 문자의 원래 의미는 터미널이나 프린터로 보내지는 NOP(No Operation) 명령어를 의미하였다. NULL 문자는 ‘\0’으로 표현하는데 이것은 아스키 코드에서 값이 0인 코드를 의미하므로 단순히 정수 0으로 쓰기도 한다.) NULL 문자의 필요성 : 컴퓨터는 쓰레기 값 역시 문자로 인식하기 때문에 어디까지가 의미 있는 문자열인지 알지 못한다. 예를 들어 10바이트의 배열을 선언하고 5바이트만 채웠을 때 끝이 지정되어 있지 않으면 나머지 5바이트에는 쓰레기 값이 들어간..
-
C 언어 기초#8 포인터(pointer)Programming 기초/C Language 2023. 4. 13. 16:19
*포인터(pointer)포인터(pointer)는 메모리 주소를 가지고 있는 변수이다.간접 참조(dereferencing, 역참조; indirection) 연산자 * : 만약 p가 변수 I를 가리킨다고 하면 *p는 변수 I와 같다. *p는 p가 가리키는 위치에 있는 데이터를 가져오라는 의미이다. 만약 p가 int형 포인터이면 p가 가리키는 위치에 정수가 있다고 가정하고 4바이트를 읽어 들인다. 만약 double형 포인터이면 p가 가리키는 위치에 실수가 있다고 생각하고 8바이트를 읽어 들이는 것이다. 이것이 포인터의 타입이 필요한 이유이다.&(앰퍼샌드) - 주소 연산자(address-of oprerator), 변수의 주소를 구하여 포인터에 대입할 때 사용*(star) - 포인터를 통하여 변수를 간접 참조할 ..
-
C 언어 기초#7 배열, 정렬, 탐색(순차탐색, 이진탐색), 다차원배열Programming 기초/C Language 2023. 4. 12. 01:20
*배열 동일한 타입의 데이터가 여러 개 저장되어 있는 데이터 저장 장소. int grade[배열의 크기] // 배열의 크기 >0 grade[배열의 순서] // 0= sizeof(grade)는 전체 배열의 크기, sizeof(grade[0]);는 배열 원소의 크기 *배열과 함수 1.배열 원소를 인수로 하여서 함수를 호출하면 복사본이 전달된다. 배열은 원본이 전달되지만 배열 원소는 복사본이 전달된다. 2..