C언어는
main()
함수를 기본으로 여러가지 명령코드와 함수들을 바탕으로 작성됨함수나 작은 단위의
부프로그램
형태로 코딩함
부프로그램
하나의 프로그램을 구성하는 여러 작은 단위의 프로그램으로 일련의 명령문을 모아두어, 외부에서 호출할 수 있게 함
main()
소스코드
사용자의 코드, 컴파일러에 의해 번역되기
컴파일러
고급언어(
C
,C++
)를 기계어로 번역함
헤더파일
#include<기본 라이브러리 헤더>
의 형식을 가짐
stdio
표준 입출력의 약자
main()
함수 이전에 작성!!printf()
함수를 사용하기 위해선<stdio.h>
선언 필요
자료형


오버플로
메모리 용량을 넘어선 값이 들어가 생기는 오류
문자열형 변수
#include <stdio.h> main () { char a[5] = { 'K', 'O', 'R', 'E', 'A',}; printf ( "%c\n", a[1]); /* 0 */ printf ( "%s\n", a); /* KOREA" "까지 출력됨, 끝을 알 수 없기에 */ char b[6] = { 'K', 'O', 'R', 'E', 'A', '\0'}; printf ( "%s\n", b); /* KOREA 종료문자 \0이 포함되어서 */ char c[6] = "KOREA"; printf ( "%s\n", c); /* KOREA 널 문자가 자동으로 입력됨 */ }
연산자
참조 연산자

형 변환 연산자
#include <stdio.h> main () { printf ( "%d \n", 4/3); // 1 소수점 이하 부분이 절삭되어 1이 출력 printf ( "%f \n", 4/3); // 0.0000 출력 서식이 실수형이라, 예상치 못한 결과가 나옴 printf ( "%f \n", (float) 4/3); // (float)라는 형 변환 연산자를 사용해, 연산 결과를 실수형으로 변환됨 printf ( "%f \n", 4 / 3.0); // 서로 다른 데이터 형식의 값들이 계산되는 과정에서 자동적으로 데이터 형이 변환됨 }
연산자 우선순위

포인터를 배열로 사용
#include <stdio.h>
#include <stdlib.h> // malloc, free 함수가 선언된 헤더 파일
int main()
{
int *numPtr = malloc(sizeof(int) * 10); // int 10개 크기만큼 동적 메모리 할당
numPtr[0] = 10; // 배열처럼 인덱스로 접근하여 값 할당
numPtr[9] = 20; // 배열처럼 인덱스로 접근하여 값 할당
printf("%d\n", numPtr[0]); // 배열처럼 인덱스로 접근하여 값 출력
printf("%d\n", numPtr[9]); // 배열처럼 인덱스로 접근하여 값 출력
free(numPtr); // 동적으로 할당한 메모리 해제
return 0;
}
malloc()
함수동적으로 메모리를 할당해줌
numPtr[0]
과numArr[0]
은 같은 값을 가져옴- 사용 후,
free()
함수로 해제시켜줘야함 numPtr[1]
과*(numPtr + 1)
도 같은 값을 가져옴- 이를 포인터 연산으로 함
- 사용 후,
이중 포인터(2차원 배열처럼 사용)
#include <stdio.h>
#include <stdlib.h> // malloc, free 함수가 선언된 헤더 파일
int main()
{
int **m = malloc(sizeof(int *) * 3); // 이중 포인터에 (int 포인터 크기 * 세로 크기)만큼
// 동적 메모리 할당. 배열의 세로
for (int i = 0; i < 3; i++) // 세로 크기만큼 반복
{
m[i] = malloc(sizeof(int) * 4); // (int 크기 * 가로 크기)만큼 동적 메모리 할당.
// 배열의 가로
}
m[0][0] = 1; // 세로 인덱스 0, 가로 인덱스 0인 요소에 값 할당
m[2][0] = 5; // 세로 인덱스 2, 가로 인덱스 0인 요소에 값 할당
m[2][3] = 2; // 세로 인덱스 2, 가로 인덱스 3인 요소에 값 할당
printf("%d\n", m[0][0]); // 1: 세로 인덱스 0, 가로 인덱스 0인 요소의 값 출력
printf("%d\n", m[2][0]); // 5: 세로 인덱스 2, 가로 인덱스 0인 요소의 값 출력
printf("%d\n", m[2][3]); // 2: 세로 인덱스 2, 가로 인덱스 3인 요소의 값 출력
for (int i = 0; i < 3; i++) // 세로 크기만큼 반복
{
free(m[i]); // 2차원 배열의 가로 공간 메모리 해제
}
free(m); // 2차원 배열의 세로 공간 메모리 해제
return 0;
}
자료형
**
+포인터이름
= malloc(sizeof(자료형 *) * 세로크기);**와 같이 세로 공간 메모리 할당- 반복문으로 반복하면서 포인터[i] = malloc(sizeof(자료형) * 가로크기);와 같이 가로 공간 메모리 할당
- 반복문으로 반복하면서 free(포인터[i]);와 같이 가로 공간 메모리 해제
- free(포인터);와 같이 세로 공간 메모리 해제
댓글