본문 바로가기
  • KEEP HUSTLE!
개인공부/C

C 기초

by 하수군 2021. 5. 7.

C언어는 main()함수를 기본으로 여러가지 명령코드와 함수들을 바탕으로 작성됨

함수나 작은 단위의 부프로그램 형태로 코딩함

  • 부프로그램

    하나의 프로그램을 구성하는 여러 작은 단위의 프로그램으로 일련의 명령문을 모아두어, 외부에서 호출할 수 있게 함

main()

  • 소스코드

    사용자의 코드, 컴파일러에 의해 번역되기

  • 컴파일러

    고급언어(C, C++)를 기계어로 번역함

헤더파일

#include<기본 라이브러리 헤더>의 형식을 가짐

  • stdio

    표준 입출력의 약자

  • main() 함수 이전에 작성!!

  • printf() 함수를 사용하기 위해선 <stdio.h> 선언 필요

자료형

![img](C:\Users\DBBANK\Desktop\C기초 관련\9898.png)

![img](C:\Users\DBBANK\Desktop\C기초 관련\11904.png)

  • 오버플로

    메모리 용량을 넘어선 값이 들어가 생기는 오류

  • 문자열형 변수

    #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 널 문자가 자동으로 입력됨 */
    }

연산자

  • 참조 연산자

    ![img](C:\Users\DBBANK\Desktop\C기초 관련\9985.PNG)

  • 형 변환 연산자

    #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);
        // 서로 다른 데이터 형식의 값들이 계산되는 과정에서 자동적으로 데이터 형이 변환됨 
    }
  • 연산자 우선순위

    ![img](C:\Users\DBBANK\Desktop\C기초 관련\9987.PNG)

포인터를 배열로 사용

#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(포인터);와 같이 세로 공간 메모리 해제

댓글