본문 바로가기
정보처리기사

[정처기] 비개발자 C언어 기초 - 6과목 프로그래밍 언어

by 공불러 2024. 4. 13.
728x90
반응형

[비개발자용] C언어 기초 - 6과목 프로그래밍 언어

C언어 기초

지난 시간에는 프로그래밍 언어의 전반적인 기초내용에 대해 알아봤습니다. 시험에 자주 출제되진 않지만, 언어의 유형(절차형, 객체지향형, 선언형, 스크립형 등)을 알아보시고 저급언어, 고급언어와 같은 기초 용어 종류 정도만 알아두시기 바랍니다.

 

이번 시간은 정말 중요한 C언어의 기초에 대한 내용입니다. 배열과 포인트 부분과 지역변수, 전역변수, 정적변수에 대한 개념을 꼭 챙겨가세요!

목차

    C언어란?

    C언어는 컴퓨터 프로그래밍 언어 중 하나로, 소프트웨어 개발에 널리 사용되는 중요한 언어입니다.

    • 여러분이 사용하는 컴퓨터 프로그램은 대부분 C언어로 작성되었거나 C언어를 기반으로 만들어졌을 가능성이 높습니다.
    • 저수준 언어: C언어는 저수준 언어로 분류됩니다. 이는 컴퓨터의 하드웨어와 직접적으로 상호 작용할 수 있는 언어라는 의미입니다. 즉, 메모리, 프로세서 등의 하드웨어를 직접 다룰 수 있습니다.
    • 이식성이 뛰어남: C언어는 다양한 컴퓨터 시스템에서 동작할 수 있도록 설계되어 있습니다. 따라서 한 번 작성된 프로그램은 다른 컴퓨터 시스템에서도 거의 수정 없이 실행될 수 있습니다.
    • 효율적인 성능: C언어는 처리 속도와 메모리 사용량이 뛰어나기 때문에 시스템 프로그래밍이나 하드웨어 제어 등의 성능에 민감한 작업에 많이 사용됩니다.
    • 구조적 프로그래밍 지원: C언어는 구조적 프로그래밍을 지원하여 복잡한 프로그램을 간단하게 구조화할 수 있습니다. 이는 코드의 가독성과 유지보수성을 높여줍니다.

    변수란?

    변수는 프로그래밍에서 데이터를 저장하고 참조하기 위해 사용되는 이름이 할당된 메모리 공간입니다.

    변수는 프로그램의 실행 중에 값이 변경될 수 있는 정보를 나타냅니다.

    이를테면, 프로그램에서 계산된 결과를 저장하거나 사용자로부터 입력을 받아 저장하거나, 다른 데이터를 임시로 보관하는 용도 등으로 변수를 사용할 수 있습니다.

    A =1;

    B=2;

    C=A+B;

    결과는 3입니다. 이때 A,B,C가 변수입니다.

    C언어 변수작성 규칙

    1. 식별자(Identifier)의 시작: 변수의 이름은 영문 알파벳(대문자 또는 소문자) 또는 밑줄(_)로 시작해야 합니다.
    2. 예약어(Reserved words) 사용: C언어에서 이미 특정 의미를 가지고 있는 예약어(키워드)는 변수의 이름으로 사용할 수 없습니다. 예를 들어, int, float, for, if 등은 변수의 이름으로 사용할 수 없습니다.
    3. 영문 대소문자 구분: C언어는 대소문자를 구분합니다. 따라서 Age, age, AGE는 서로 다른 변수로 간주됩니다.
    4. 영문자, 숫자, 밑줄 사용: 변수 이름에는 영문 알파벳(대문자 또는 소문자), 숫자, 밑줄(_)을 사용할 수 있습니다. 공백이나 특수문자는 사용할 수 없습니다.
    5. 길이 제한: 변수의 이름은 63자를 초과할 수 없습니다.
    6. 의미 있는 이름 사용: 변수의 이름은 해당 변수가 나타내는 데이터나 역할을 이해하기 쉽게 작성하는 것이 좋습니다. 예를 들어, 나이를 나타내는 변수의 이름으로 age, 학생의 이름을 나타내는 변수의 이름으로 student_name 등을 사용할 수 있습니다.
    7. 콘벤션 준수: 보통 C언어에서는 변수의 이름을 소문자로 작성하고, 여러 단어로 이루어진 경우 단어 사이를 밑줄(_)로 구분하는 스네이크 케이스(snake_case) 방식을 따릅니다. 예를 들어, student_age, total_score와 같이 변수 이름을 작성합니다.

    C언어 자료형

    분류 자료형 크기 (바이트) 데이터 범위
    문자형 char 1 -128 ~ 127 또는 0 ~ 255 (부호 있는/없는 문자형)
    unsigned char 1 0 ~ 255 (부호 없는 문자형)
    정수형 short 2 -32,768 ~ 32,767 또는 0 ~ 65,535 (부호 있는/없는 정수)
    unsigned short 2 0 ~ 65,535 (부호 없는 정수)
    int 4 -2,147,483,648 ~ 2,147,483,647 또는 0 ~ 4,294,967,295 (부호 있는/없는 정수)
    unsigned int 4 0 ~ 4,294,967,295 (부호 없는 정수)
    long 4 또는 8 -2,147,483,648 ~ 2,147,483,647 또는 0 ~ 4,294,967,295 (부호 있는/없는 정수)
    unsigned long 4 또는 8 0 ~ 4,294,967,295 (부호 없는 정수)
    long long 8 -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 또는 0 ~ 18,446,744,073,709,551,615 (부호 있는/없는 정수)
    unsigned long long 8 0 ~ 18,446,744,073,709,551,615 (부호 없는 정수)
    실수형 float 4 3.4E-38 ~ 3.4E38 (부동 소수점)
    double 8 1.7E-308 ~ 1.7E308 (더블 정밀도 부동 소수점)
    long double 10 또는 16 3.4E-4932 ~ 1.1E4932 (확장 정밀도 부동 소수점)

     

    JAVA의 경우는 어떨까요?

      자료형 크기 데이터 범위
    논리형 boolean 1 true or false
    문자형 char 2 0~65,535
    정수형 byte 1 -128 ~ 127
    short 2 -32,768 ~ 32,767
    int 4 -2,147,483,648 ~ 2,147,483,647
    long 8 -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
    실수형 float 4 1.4E-45 ~ 3.4E38
    double 8 4.9E-324 ~ 1.7E308

    변수를 선언하는 방법

    기본 변수 선언

    int a; 초기화하지 않고 선언하는 방식입니다.

    초기화란 a에 특성 값을 지정하는 것입니다.

    int age;

    여러 변수 동시 선언

    int age, height, weight;

    초기값 지정

    int age = 30;


    여러 변수 선언 및 초기값 지정

    여러 변수를 선언하고 동시에 초기값을 지정할 수도 있습니다.

    int num1 = 10, num2 = 20, result;


    동일한 데이터 형식을 가지는 변수의 그룹화

    동일한 데이터 형식을 가지는 변수를 그룹화하여 선언할 수 있습니다. 

    이 때에는 변수들의 이름을 쉼표(,)로 구분하여 나열하고 마지막에 세미콜론(;)을 사용하여 선언을 마무리합니다.

    int num1, num2, num3;


    변수 선언과 동시에 값 변경

    변수를 선언하는 동시에 값을 변경할 수도 있습니다.

    int num = 10;
    num = 20; // 변수의 값을 변경


    변수 선언 시 주소 값 지정

    포인터 변수를 선언할 때는 변수 앞에 별표(*)를 사용하여 선언하고, 해당 변수의 주소를 가리키는 포인터로 초기화할 수 있습니다.

    이 부분은 시험에 자주 출제되는 배열, 포인트 부분입니다. 기초부터 꼼꼼히 익혀두세요!

    int *ptr = NULL; // 포인터 변수 선언 및 NULL 값으로 초기화


    (추가) const로 상수 변수 선언

    const 키워드를 사용하여 변수를 선언하면 해당 변수는 상수가 되어 값이 변경되지 않습니다.

    const int MAX_VALUE = 100;


    사용하면 안되는 변수명

    321start; - 숫자로 시작할 수 없습니다.

    a pple : 공백을 사용할 수 없습니다.

    for : 예약어는 사용할 수 없습니다.

     

    C언어 연산자

    반응형

    산술연산자

    연산자 예시 설명
    + a + b 두 피연산자를 더합니다.
    - a - b 첫 번째 피연산자에서 두 번째 피연산자를 뺍니다.
    * a * b 두 피연산자를 곱합니다.
    / a / b 첫 번째 피연산자를 두 번째 피연산자로 나눕니다. 나눗셈의 몫을 반환합니다.
    % a % b 첫 번째 피연산자를 두 번째 피연산자로 나눕니다. 나눗셈의 나머지를 반환합니다.
    7/2를 하면 몫이 6 나머지가 1입니다.
    즉, 7%2를 하면 나머지인 1이 결과로 나옵니다.
    1/7

    만약, 7을 0으로 나누면 어떻게 될까요? 이러한 문제는 배열에 관련되었을 때 헷갈릴 수 있습니다.
    0으로 7을 나눌 수없어 7%0은 0이됩니다.
    0을 7로 나누는 0%7도 0입니다.

    관계연산자

    연산자 예시 설명
    == a == b 두 피연산자가 서로 같은지 비교합니다.
    != a != b 두 피연산자가 서로 다른지 비교합니다.
    > a > b 첫 번째 피연산자가 두 번째 피연산자보다 큰지 비교합니다.
    < a < b 첫 번째 피연산자가 두 번째 피연산자보다 작은지 비교합니다.
    >= a >= b 첫 번째 피연산자가 두 번째 피연산자보다 크거나 같은지 비교합니다.
    <= a <= b 첫 번째 피연산자가 두 번째 피연산자보다 작거나 같은지 비교합니다.

    논리연산자

    논리 연산자 && a && b 두 조건식이 모두 참일 때 true를 반환합니다.
    || a || b 두 조건식 중 하나라도 참이면 true를 반환합니다.
    ! !a 조건식의 결과를 반대로 만듭니다.

    비트연산자

    비트 연산자 & a & b 두 비트가 모두 1이면 1을 반환합니다.
    | a | b 두 비트 중 하나라도 1이면 1을 반환합니다.
    ^ a ^ b 두 비트가 서로 다르면 1을 반환합니다.
    ~ ~a 비트를 반전시킵니다.

    이부분은 개념이 어렵습니다.
    ~10은 1을 더해서 11이되고 앞에 -를 붙입니다.
    ~-10은 1을 빼고 양수로 바꿉니다. 9가 됩니다.
    << a << b 왼쪽으로 비트를 이동시킵니다.

    선행 개념이 있습니다. 2진수로 변환하는 것입니다.
    2^7 2^6 2^5 2^4 2^3 2^2 2^1 2^0(1)
    위와 같이 우리가 쓰는 10진수를 2진수로 바꾸고
    10 = 2^3 + 2^1
    10 = 8+2
    10은 이진수로 10 <<1 를하면
    1100이 되고 2^4+2^2
    16+4=20이 됩니다.
    >> a >> b 오른쪽으로 비트를 이동시킵니다.

    삼항연산자

    삼항 연산자 ?: (a > b) ? a : b 조건식이 참이면 첫 번째 피연산자를 반환하고, 거짓이면 두 번째 피연산자를 반환합니다.

    대입연산자

    대입 연산자 = a = b 오른쪽 피연산자의 값을 왼쪽 피연산자에 대입합니다.
    += a += b 왼쪽 피연산자에 오른쪽 피연산자를 더하고 결과를 왼쪽 피연산자에 대입합니다.
    -= a -= b 왼쪽 피연산자에서 오른쪽 피연산자를 빼고 결과를 왼쪽 피연산자에 대입합니다.
    *= a *= b 왼쪽 피연산자에 오른쪽 피연산자를 곱하고 결과를 왼쪽 피연산자에 대입합니다.
    /= a /= b 왼쪽 피연산자를 오른쪽 피연산자로 나눈 후 결과를 왼쪽 피연산자에 대입합니다.
    %= a %= b 왼쪽 피연산자를 오른쪽 피연산자로 나눈 나머지를 왼쪽 피연산자에 대입합니다.
    <<= a <<= b 왼쪽 피연산자의 비트를 오른쪽 피연산자만큼 왼쪽으로 이동시키고 결과를 왼쪽 피연산자에 대입합니다.
    >>= a >>= b 왼쪽 피연산자의 비트를 오른쪽 피연산자만큼 오른쪽으로 이동시키고 결과를 왼쪽 피연산자에 대입합니다.

    연산자 우선순위

    사칙연산에서도 곱셈이 덧셈이나 뺄셈보다 먼저 계산되어야하고, 괄호가 있다면 괄호부터 먼저 계산해야합니다.

    프로그래밍도 역시 동일합니다. 예시는 다음과 같습니다,

    int a = 5, b = 3, c = 2;
    int result;
    
    result = a * b + c;       // (a * b) + c를 수행합니다.
    result = a + b * c;       // a + (b * c)를 수행합니다.
    result = a / b + c - a;   // ((a / b) + c) - a를 수행합니다.
    result = a * (b + c);     // a * (b + c)를 수행합니다.

     

    입출력 함수

    C 언어에서 입출력 함수는 stdio.h 헤더 파일에 정의되어 있습니다. 대표적으로 사용되는 입출력 함수로는 printf, scanf, getchar, putchar 등이 있습니다. 각 함수의 역할과 사용 방법에 대해 간단히 설명하겠습니다:

    1. printf 함수
      • 출력 함수로, 특정 형식에 맞추어 텍스트를 화면에 출력합니다.
      • 형식 지정자를 사용하여 출력할 데이터의 형식을 지정할 수 있습니다.
      • 예시: printf("Hello, World!\n");
    2. scanf 함수
      • 입력 함수로, 사용자로부터 텍스트를 입력받아 변수에 저장합니다.
      • 형식 지정자를 사용하여 입력할 데이터의 형식을 지정할 수 있습니다.
      • 예시: scanf("%d", &num);
    3. getchar 함수
      • 한 번에 한 문자씩 입력 받는 함수로, 표준 입력 스트림에서 문자를 읽어옵니다.
      • 입력 버퍼에 있는 문자를 꺼내서 반환합니다.
      • 예시: char ch = getchar();
    4. putchar 함수
      • 한 번에 한 문자씩 출력하는 함수로, 표준 출력 스트림에 문자를 출력합니다.
      • 주어진 문자를 표준 출력에 출력합니다.
      • 예시: putchar('A');

    제어문

    if 문

    조건에 따라 코드 블록을 실행하거나 건너뛰는 데 사용됩니다.

    if (조건식) {
        // 조건이 참일 때 실행될 코드
    } else {
        // 조건이 거짓일 때 실행될 코드
    }


    switch 문

    다양한 조건에 따라 코드 블록을 실행할 때 사용됩니다.
    여러 개의 case로 구성되며, 각 case에는 특정한 값이나 조건을 지정합니다.

    switch에 들어온 변수부터 실행하게 됩니다.

    언제까지? break를 만날때까지 실행됩니다.

    switch (변수) {
        case 값1:
            // 값1에 해당하는 경우 실행될 코드
            break;
        case 값2:
            // 값2에 해당하는 경우 실행될 코드
            break;
        default:
            // 모든 case에 해당하지 않는 경우 실행될 코드
            break;
    }


    for 문

    특정 조건이 충족될 때까지 반복하여 코드 블록을 실행하는 데 사용됩니다.
    초기화, 조건식, 증감식으로 구성됩니다.

    for (초기화; 조건식; 증감식) {
        // 조건이 참일 때 실행될 코드
    }

    while 문

    조건이 참인 동안 반복하여 코드 블록을 실행하는 데 사용됩니다.

    while (조건식) {
        // 조건이 참일 때 실행될 코드
    }


    do~while 문

    코드 블록을 실행한 후 조건을 검사하여 조건이 참이면 반복하는 데 사용됩니다.

    do는 무조건 실행하고나서 while의 조건을 확인하여 실행합니다.

    do {
        // 코드 블록 실행
    } while (조건식);

    반복문 차이(for, while, do~while)

      for 문 while 문 do~while 문
    구조 for (초기화; 조건식; 증감식) { ... } while (조건식) { ... } do { ... } while (조건식);
    반복 조건 조건식을 반복 전에 검사 조건식을 반복 전에 검사 조건식을 반복 후에 검사
    반복 횟수 지정 반복 횟수를 명시적으로 지정 가능 반복 횟수를 명시적으로 지정하지 않음 반복 횟수를 명시적으로 지정하지 않음
    반복 조건 검사 매 반복마다 조건식을 검사함 반복 전에 조건식을 검사함 최소한 한 번의 반복을 보장함
    초기화 반복문 진입 전에 초기화가 필요함 초기화가 반복문 바깥에서도 가능 반복문 진입 전에 초기화가 필요함
    예시 c for (int i = 0; i < 5; i++) { ... } c int i = 0; while (i < 5) { ... } c int i = 0; do { ... } while (i < 5);
    적합한 상황 반복 횟수를 명확히 알 때 유용함 반복 횟수가 불명확하거나 조건에 따라 달라질 때 유용함 반복 조건을 최소한 한 번은 보장해야 할 때 유용함

    continue 문

    현재 반복을 중지하고 다음 반복으로 넘어가는 데 사용됩니다.
    주로 반복문 내에서 특정 조건을 만족할 때 사용됩니다.

    아래 출력은 i가 1인채로 시작합니다.

    5를 1로 나누면 나머지가 0이므로 1을 출력하게됩니다. 그리고 다시 for문으로 올라갑니다.

    5를 2로 나누명 나머지가 1이되므로 continue를 수행하여 다시 for문으로 올라갑니다.

    for (int i = 1; i <= 10; i++) {
        if (i % 10 == 0) {
            continue; // 짝수일 경우 반복문의 나머지 부분을 건너뜁니다.
        }
        printf("%d\n", i);
    }

    continue 문

    break 문

    반복문이나 switch 문에서 실행을 중지하고 블록을 빠져나오는 데 사용됩니다.
    주로 특정 조건을 만족할 때 반복을 중지할 때 사용됩니다.

    int num = 1;
    while (1) {
        if (num > 5) {
            break; // num이 5보다 크면 반복문을 빠져나갑니다.
        }
        printf("%d\n", num);
        num++;
    }

    C언어 함수

    C언어의 함수는 특정한 작업을 수행하고 그 결과를 반환하는 코드의 집합입니다. 함수를 사용하면 코드의 재사용성과 가독성을 높일 수 있습니다.

    C언어 함수의 특징은 다음과 같습니다.

    1. 반환 값: 함수는 작업의 결과를 반환 값으로 반환할 수 있습니다. 반환 값은 함수 호출문에서 변수에 저장하여 사용할 수 있습니다.
    2. 매개변수: 함수는 매개변수를 통해 외부로부터 값을 전달받을 수 있습니다. 매개변수는 함수 호출 시 전달한 값을 함수 내부에서 사용할 수 있도록 합니다.
    3. 함수 호출: 함수는 함수 호출문을 통해 호출됩니다. 함수 호출문은 함수의 이름과 매개변수를 포함합니다.
    4. 재귀 호출: 함수는 자기 자신을 호출하는 재귀 호출을 할 수 있습니다. 재귀 호출은 반복적인 작업을 효율적으로 처리할 수 있습니다.
    5. 라이브러리 함수: C언어는 미리 정의된 라이브러리 함수를 제공합니다. 라이브러리 함수는 수학, 문자열 처리, 파일 입출력 등 다양한 작업을 수행할 수 있습니다.

    사용법은 다음과 같습니다.

    • 함수 정의: 함수를 사용하기 위해서는 먼저 함수를 정의해야 합니다. 함수 정의는 함수의 이름, 반환 값의 자료형, 매개변수를 선언하고, 함수의 본문을 작성합니다.
    • 함수 호출: 함수를 호출할 때는 함수의 이름과 매개변수를 전달합니다. 함수 호출문은 반환 값을 변수에 저장하여 사용할 수 있습니다.

    아래의 코드는 add 함수를 정의하고, main 함수에서 add 함수를 호출하여 두 개의 정수 2와 3을 더한 결과를 출력합니다.

    int add(int x, int y) {
      return x + y;
    }
    
    int main() {
      int result = add(2, 3);
      printf("덧셈 결과: %d\n", result);
      return 0;
    }

    변수 유효 범위

    지역변수

    지역 변수는 함수가 호출될 때 생성되고, 함수가 종료될 때 소멸됩니다. 지역 변수는 함수 내부에서만 사용할 수 있으며, 함수 외부에서는 접근할 수 없습니다.

    • 지역 변수는 함수 내부에서 선언된 변수
    • stack 영역에 저장
    • {}안에 들어간 모든 변수
    • {}안을 모두 수행하면 사라짐

    아래의 예시에서 add 함수 내부에서 선언된 result는 지역 변수입니다. result는 add 함수 내부에서만 사용할 수 있으며, add 함수 외부에서는 접근할 수 없습니다.

    int add(int x, int y) {
      int result = x + y;
      return result;
    }

    전역변수

    전역 변수는 프로그램 전체에서 사용할 수 있는 변수입니다. 전역 변수는 프로그램이 시작될 때 생성되고, 프로그램이 종료될 때 소멸됩니다. 전역 변수는 프로그램 어디에서나 접근할 수 있습니다.

    전연변수 문제가 기출에서 나왔었는데, 이 전까지 등장하지 않은 형태이고 별도의 공부가 없으면 맞추기 어려웠습니다.

    반드시 사용법을 확인해보세요.

     

    2023년 2회 시험으로 본 내가 정보처리기사 실기에 떨어진 이유 - C 전역변수에 대한 이해

    2023년 2회는 비개발자가 느끼기엔 굉장히 치사하고 더러웠다. 뭐가 치사하고 더럽다고 느꼈는가? 암호화 알고리즘을 통째로 외웠는데, 5점 / 책에도 강의에도 없던 내용의 프로그래밍 문제도 5점

    shareknowledge-top.tistory.com

    • 모든 순간에 다 같이 사용하는 변수
    • 함수의 외부에 선언
    • 초기화 하지 않으면 0으로 초기화
    • Data 영역에 저장
    • {} 밖의 변수가 설정되면, {}안에 그 변수가 있는 지 꼭확인해야합니다.

    위의 예시에서 global_var는 전역 변수입니다. global_var는 프로그램 어디에서나 접근할 수 있습니다.

    int arr[2][3] = {{1, 2, 3}, {4, 5, 6}};
    int i, j;
    
    for(i=0; i<2; i++) {
        for(j=0; j<3; j++) {
            printf("%d ", arr[i][j]);
        }
        printf("\n");
    }

     

     

    정적변수(static 변수)

    정적 변수는 함수 내부에서 선언되지만, 함수가 종료되어도 소멸되지 않고 프로그램이 종료될 때까지 유지되는 변수입니다. 정적 변수는 함수 내부에서만 사용할 수 있지만, 함수가 호출될 때마다 새로운 값이 생성되는 것이 아니라 이전에 저장된 값이 유지됩니다.

    • static으로 선언
    • 프로그램 종료시까지 메모리에 남음
    • 지역변수와 전역변수 특징을 모두 가짐
    • 단 한번만 초기화

    아래의 예시에서 increment 함수 내부에서 선언된 count는 정적 변수입니다. count는 increment 함수가 호출될 때마다 새로운 값이 생성되는 것이 아니라 이전에 저장된 값이 유지됩니다.

    void increment(void) {
      static int count = 0;
      count++;
      printf("정적 변수 값: %d\n", count);
    }
    
    int main() {
      increment(); // 정적 변수 값: 1
      increment(); // 정적 변수 값: 2
      return 0;
    }

    배열과 포인트

    1차원 배열

    1차원 배열: 가장 기본적인 형태의 배열로, 하나의 인덱스를 사용하여 요소에 접근합니다.

    int arr[5] = {1, 2, 3, 4, 5};
    int i;
    
    for(i=0; i<5; i++) {
        printf("%d ", arr[i]);
    }

    2차원 배열

     두 개의 인덱스를 사용하여 요소에 접근하는 배열입니다. 2차원 배열은 행과 열로 구성됩니다.

    arr[2][3]은 2행 3열이라는 말입니다.

    아래 표의 시작이 0인 것은 프로그램은 늘 첫 시작을 0으로 지정하게 됩니다. 여기서 0은 주소지입니다.

    실수형은 4바이트이므로 각 거리는 4바이트씩입니다.

      0 1 2
    0 [0][0]1 [0][1] 2 [0][2] 3
    1 [1][0] 4 [1][1] 5 [1][2
    +] 6

    2

    int arr[2][3] = {{1, 2, 3}, {4, 5, 6}};
    int i, j;
    
    for(i=0; i<2; i++) {
        for(j=0; j<3; j++) {
            printf("%d ", arr[i][j]);
        }
        printf("\n");
    }

    포인터

    변수의 앞에 '*'를 붙여 선언합니다.

    변수는 메모리에 저장되기 떄문에 메모리의 특정 주소지가 저장됩니다.

    값이 아닌 주소지임을 기억하셔야합니다.

    int num = 10;
    int *ptr = &num;
    
    printf("num의 값: %d\n", num);
    printf("ptr의 값: %d\n", ptr);
    printf("*ptr의 값: %d\n", *ptr);

    C언어 구조체란?

    C언어에서 구조체(struct) 는 서로 다른 자료형의 변수들을 하나로 묶어서 사용할 수 있는 사용자 정의 자료형입니다.

    구조체는 다음과 같은 특징을 가지고 있습니다.

    • 구조체는 사용자가 필요한 자료형을 조합하여 새로운 자료형을 만들 수 있습니다.
    • 구조체는 여러 개의 변수를 하나로 묶어서 관리할 수 있기 때문에, 데이터의 구조화와 관리에 유용합니다.
    • 구조체의 각 변수는 멤버(member)라고 부르며, 멤버는 구조체 내부에서 순서대로 저장됩니다.
    • 구조체는 메모리를 효율적으로 사용할 수 있습니다.
    struct Person {
        char name[20];
        int age;
        float height;
    };
    
    int main() {
        struct Person p1;
        strcpy(p1.name, "John");
        p1.age = 25;
        p1.height = 1.8;
        
        printf("이름: %s\n", p1.name);
        printf("나이: %d\n", p1.age);
        printf("키: %.1f\n", p1.height);
        
        return 0;
    }

    C언어 표준 라이브러리

    입출력 라이브러리

    • stdio.h: C언어의 기본적인 입출력을 담당하는 라이브러리입니다.
      • printf 함수: 형식화된 출력을 지원하는 함수로, 변수의 값을 출력할 수 있습니다.
      • scanf 함수: 형식화된 입력을 지원하는 함수로, 사용자로부터 데이터를 입력받을 수 있습니다.
    • conio.h: 콘솔 기반의 입출력을 담당하는 라이브러리입니다.
      • getch 함수: 사용자로부터 한 문자를 입력받습니다.
      • putch 함수: 한 문자를 출력합니다.

    2.수학 라이브러리

    • math.h: 수학적 연산을 위한 함수를 제공하는 라이브러리입니다.
      • sin, cos, tan 함수: 삼각함수를 계산합니다.
      • sqrt 함수: 제곱근을 계산합니다.
      • log, log10 함수: 로그를 계산합니다.

    3.문자열 처리 라이브러리

    • string.h: 문자열 처리를 위한 함수를 제공하는 라이브러리입니다.
      • strlen 함수: 문자열의 길이를 반환합니다.
      • strcpy 함수: 문자열을 복사합니다.
      • strcat 함수: 문자열을 연결합니다.

    4.메모리 관리 라이브러리

    • stdlib.h: 메모리 관리를 위한 함수를 제공하는 라이브러리입니다.
      • malloc 함수: 동적으로 메모리를 할당합니다.
      • free 함수: 할당된 메모리를 해제합니다.

    5.파일 입출력 라이브러리:

    • stdio.h: 파일 입출력을 위한 함수를 제공하는 라이브러리입니다.
      • fopen 함수: 파일을 엽니다.
      • fclose 함수: 열린 파일을 닫습니다.
      • fread 함수: 파일로부터 데이터를 읽습니다.
      • fwrite 함수: 파일에 데이터를 씁니다.
    728x90
    반응형

    댓글