1. 배열
- 1배열은 같은 자료형의 데이터가 되어 있는 데이터 저장 장소로, 정수형, 문자형 등 같은 자료형에 배열 하나의 이름을 지정하여 선언할 수 있다.
- 2배열을 선언만 하고 초기화하지 않으면, 각 배열 요소에 아무런 의미를 가지지 않는 이 저장되기 때문이며 주의해야 한다.
- 3배열(array)은 같은 자료형의 데이터가 여러 개 저장되어 있는 데이터 저장 장소이기 때문에 배열 안에 각각의 원소를 처리 할 수 있다는 장점이 있다.
- 4배열을 초기화 하는 방법은 여러 가지가 있지만 사용자에게 입력 받아 반복문을 활용해 초기화 할 수 있고 할 수 있고 배수형태로도 초기화가 가능하다.
2. 배열과 문자열
- 1정수형 배열은 배열(array)에 정수형 데이터를 저장하는 것이고, C언어에서 배열 이름 앞에 자료형을 써야 하는데 이때 로 지정한 것이다.
- 2문자형 배열은 C언어에서는 char변수에는 문자 1개를 저장하고 로 표현한다.
- 3문자열 함수는 와 같은 함수로 문자열을 다루기 위한 함수들이 있고, 문자열 함수들을 포함하고 있는 라이브러리는 string.h 에 포함되어 있다.
- 4이란 2차원 이상의 배열을 의미하며, 배열 요소로 또 다른 배열을 가지는 배열을 의미하고, 2차원 배열은 배열 요소로 1차원 배열을 가지는 배열이며고 3차원 배열은 배열 요소로 2차원 배열을 가지는 배열이다.
3. 변수 및 배열의 메모리 할당과 스택
- 1데이터로 표현하면 가장 먼저 입력된 데이터가 가장 아래쪽에 쌓이고 최신에 입력된 데이터는 가장 위쪽에 쌓이게 되는 구조로, 마치 더미를 쌓아 올린 모습과 흡사하기 때문에 이라고 부른다.
- 2정수형 변수의 크기는 이므로 정수형 변수 a를 선언하면 임의의 위치에 4바이트가 할당된다.
- 3정수형 배열은 배열 aa의 주소를 구할 때는 ‘&’를 쓰지 않고 단순히 로 표현한다.
4. 배열과 포인터
- 1포인터(pointer)는 프로그래밍 언어에서 다른 변수, 혹은 그 변수의 메모리 공간주소를 가리키는 변수를 말하며, 라고도 부른다.
- 2포인터 변수는 일반 변수의 선언에서 변수명 앞에 ’*’를 붙여주며, 이렇게 선언하게 되면 포인터 변수로 선언이 되어 여기에 주소를 담을 수 있게 된다. 초기화를 해주지 않으면 다른 변수들과 마찬가지로 이 들어가 있기 때문에 초기화를 해주어야 한다.
5. 함수 1
- 1프로그래밍에서의 함수는 값을 넣어주면 함수내에서 덧셈 같은 비교적 간단한 연산부터 회원 인증과 같은 복잡한 작업을 수행하고 하는 것을 의미한다.
- 2함수를 사용하는 가장 큰 이유는 프로그래밍 쉽게 할 수 있기 때문이다.
- 3함수는 반환 자료형과 함수이름, 인수으로 표현되는데 이를 이라고 하고, 함수의 반환 자료형(return type)은 정수형(integer, int)이다.
6. 함수 2
- 1반환값(return value)은 호출된 함수가 호출한 곳으로 작업의 결과값을 전달하는 것으로 인수는 여러 개가 가능하나 반환값은 하다.
- 2함수 호출에서 종료까지 수행 원리를 살펴보면 함수가 호출되면 해당 함수에 필요한 변수가 메모리에 할당되는데 이때 생성되는 이 스택이다.
- 3라이브러리 함수는 컴파일러에서 제공하는 함수이고, 는 규칙성이 없이 임의로 생성되는 수이다.
7. 기억클래스 : 지역 변수, 전역 변수, 정적 지역 변수, 레지스터 변수
- 1지역변수란 이름에서 느끼듯이 한 지역 내에서만 사용할 수 있는 변수로, 지역이란, 에 의해 만들어지는 영역을 뜻한다.
- 2는 지역변수와 반대로 어느 지역에서나 사용할 수 있는 변수이고, 블록(괄호) 안에 쓴 변수가 지역변수였다면, 블록 밖에 쓴 변수는 전역변수이다.
- 3C언어에서 란 static 키워드로 선언한 변수를 의미하며, 이렇게 선언된 정적 변수는 지역 변수와 전역 변수의 특징을 모두 가지게 된다. 함수 내에서 선언된 정적 변수는 전역 변수처럼 단 한 번만 초기화되고 프로그램이 종료되면 메모리상에서 지워진다.
- 4란 지역 변수를 선언할 때 register 키워드를 붙여 선언한 변수를 의미하고, 이렇게 선언된 레지스터 변수는 CPU의 레지스터(register) 메모리에 저장되어 빠르게 접근할 수 있게 된다.
8. 표준 입출력
- 1필요한 표준 입출력 함수를 사용하기 위해서는 반드시 와 같이 표준 입출력 함수를 포함시킨 후 사용하여야 한다. stdio의 의미는 표준 입력(standard input)과 표준 출력(standard output) 이다.
- 2gets(문자 배열)은 표준 입력 장치(키보드)로부터 만큼 문자열을 입력받으며, 숫자를 입력해도 무조건 문자열로 취급한다.
- 3문자 입력 함수는 getch(), getche(), getchar() 등이 있으며, 는 putchar(문자형변수), putch(문자형변수) 등이 있다.
9. 고급 포인터
- 1변수나 배열의 메모리 할당은 이라고 한다. 정적 할당은 만약 처음 int형 배열에 100개의 데이터를 넣으려 선언을 하고 나서 보니 실제 프로그램을 실행하다 보니 int배열이 50개만 필요한 경우가 발생하면 메모리가 낭비된다.
- 2동적 메모리 할당은 컴퓨터 프로그래밍에서 동안 사용할 메모리 공간을 할당하는 것을 말한다.
- 3프로그램을 실행시키면 운영체제는 우리가 실행시킨 프로그램을 위해 메모리 공간을 할당해주는데 할당되는 메모리 공간은 크게 스택(Stack), 힙(Heap), 데이터(Data)영역, 으로 나눠진다.
- 4동적 메모리 확보 개념인 는 함수 호출시 할당하고자 하는 메모리의 크기(size)를 바이트 단위로 힙영역에 그 크기만큼 메모리를 할당하게 된다.
- 5이미 할당한 공간의 크기를 바꿀 때 를 사용하고, realloc 함수는 동적 메모리 확보 개념이다
10. 포인터 배열
- 1이란 배열 요소로 포인터 변수를 가지는 배열을 의미하는데 포인터 변수를 저장할 수 있는 배열을 의미한다.
- 2포인터 배열을 사용하는 이유는 일반적으로 여러 문자열을 입력 받으면 2차원 배열을 사용하는데 입력한 글자의 길이가 일정치 않아 적절한 배열의 크기를 설정하기 어렵기 때문에 포인터 배열을 이용하면 를 줄일 수 있다.
- 3메모리의 동적할당은 많은 기억공간을 할당 받아서 배열로 사용하는 것이 효율적이다.
- 4메모리 동적 할당을 사용하면 입력되는 문자열의 길이에 맞게 을 할당할 수 있다.
11. 구조체, 공용체와 열거형
- 1란 사용자가 사용자 정의형을 만들 수 있는 사용자 정의 타입으로, 서로 다른 데이터형의 변수들을 하나로 묶어서 사용하는 기능이다.
- 2구조체의 정의와 구조체 변수의 선언을 동시에 할 수도 있고, C언어의 는 이미 존재하는 타입에 새로운 이름을 붙일 때 사용한다.
- 3배열의 경우와는 달리 구조체의 이름은 구조체를 가리키는 주소가 아니어서 포인터에 할당할 때에는 반드시 주소 를 사용해야 한다.
- 4는 union 키워드를 사용하여 선언하며, 한 가지를 제외한 모든 면에서 구조체와 같으며, 다른점은 모든 멤버 변수가 하나의 메모리 공간을 공유한다는 것이다.
- 5는 새로운 타입을 선언하면서, 동시에 해당 타입이 가질 수 있는 정수형 상수값도 같이 명시할 수 있는 타입이다.
12. 표준라이브러리 함수
- 1C표준 라이브러리는 매크로, 타입 정의 그리고 문자열 처리나 수학적 연산, 입출력 프로세스, 메모리 할당과 서비스 같은 작업을 위한 함수들을 제공한다.
- 2C 프로그래밍 언어는 표준 라이브러리에 문자열 관련 명령을 구현하는 여러 함수들이 존재한다. 과 같은 다양한 명령이 지원된다.
- 3문자열 복사 함수는 memcpy(), memmove(), 는 strcat() 등이 있다.
- 4문자열 비교 함수는 memcmp(), 는 strlen()이 있다.