Language/C C언어 강좌(bzero, memset/저장 클래스/그 밖의 자료형과 제어문)
  • 728x90
    반응형

     

     

     

    C언어 Chapter 33.


     

     

     

    파일 입/출력 복습

    🔔 예) 학생의 레코드를 키보드로부터 입력받아 write()함수를 이용하여 구조체 단위로 파일에 기록하고, 다시 열어서 read()함수로 읽어서 화면에 출력하는 프로그램.

     

    [구조체 STUDENT]

     

    [main 함수]

     

    실행 결과

     

     

    리다이렉션

    📌 리다이렉션(redirection)이란 표준 입력 장치인 키보드나 표준 출력 장치인 스크린을 대상으로 작성된 프로그램에서 키보드나 스크린을 대신 입력이나 출력을 다른 파일로 바꾸어 주는 것을 말한다.

     

     

     

    bzero() 함수 와 memset()

    void bzero(void *s, size_t n);

     

    • 메모리를 0으로 채운다.

    void *memset(void *s, int c, size_t n);

     

    • 메모리를 상수 바이트(constant byte) 로 채운다.

     

    🔔 예) bzero() 함수와 memset() 함수 구현

     

    실행 결과

     

     

     

    저장 클래스(Storage Class)

    • C언어에서 변수와 함수는 저장 클래스를 가진다.
    • 저장 클래스는 변수와 함수의 지속기간(duration)과 유효범위(scop)를 명시해준다.
    • 저장클래스의 설정이유는 변수와 함수에 지속기간과 유효범위를 부여함으로써 메모리를 효율적으로 사용하고 버프프로그래밍 오류를 줄이기 위해서이다.
    • 저장 클래스에는 auto, register, static, extern의 네 가지가 있다.

     

     

    지속 시간

    • 지속기간은 변수가 프로그램의 실행 중에 시간상으로 존재하는 기간을 말한다.
    • auto클래스는 가장 많이 사용되는 것으로 함수 내에서 저장 클래스를 명시하지 않고 사용되는 변수들이다.
      (지금까지 생략 되어 사용 )
    • auto클래스의 변수는 함수 내에서 선언되어 함수가 실행을 시작할 때 생성되어 함수가 실행을 종료하면 소멸된다.

    void function()

    {

        auto int one;

        int two;

        register int three;

    }

     

    • register 클래스는 컴파일러가 CPU의 레지스터 중 하나를 이 변수로 사용.
    • register변수의 크기는 register크기보다 클 수 없다.
    • 빨라야한느 변수를 register 변수로 사용된다.
    • staitic 변수는 자동으로 0 을 초기화 한다.

     

     

    유효 범위

    • 프로그램 내에서 변수 x가 인식되는 범위를 x의 유효범위라고 한다.
    • 전역 변수와 지역변수의 유효범위의차이 static 함수의 유효범위.
      (앞장에서 설명 되었음)

     

    [변수의 유효 범위]

     

    [위 그림 설명]

     

     

     


     

    ✨ 그 밖의 자료형과 제어문

     

     

    열거형

    • 열거형은 이름을 갖는 정수형의 상수를 정의하여 프로그램을 이해하기 쉽게 해준다.

    enum type_name {열거 리스트};

     

    🔔 예)

    enum day_type = {sun, mon, tue, wed, thu, fri, sat};

    enum day_type today, yesterday;

    today = mon;

    yesterday = today - 1;

    printf("today is %d\n", today);

     

    • #define 과 비슷한 형태로 쓰여진다.
    • enum() 함수 내에서 각 원소의 값을 임의로 지정할 수 있다.

    sum = 0, mon = 1, tue = 2, wed = 3, thu = 4, fri = 5, sat = 6

     

     

    🔔 예) enum 사용 예

     

    실행 결과

     

     

    🔔 예) enum의 활용

     

    🎯 프로그램 설명

    • "주"라는 요일을 추가했다.
    • 프로그램을 수정시 추가 삭제가 편리하다.

     

    실행 결과

     

     

    🔔 예) enum 활용법

    [enum 선언부]

     

    [main 함수 부분]

     

    🎯 프로그램 설명

    • 아래 for() 문에서 입력받는 요일과 msg의 요일을 비교하여 해당하는 요일의 배열번호를 받아와서 아래 if() 문으로 출력한다.

    실행 결과

     

     

     

    공용체

    • 구조체와 유사하지만 자료형이 다른 멤버들이 같은 메모리를 공유 한다.

    typedef union number

    {

        short snum;

        float fnum;

    } NUMBER;

     

    • 구조체처럼 각 멤버를 위해서 독립된 공간을 마련하는 것이 아니라 가장 큰 멤버를 수용할 수 있는 공간을 할당한다.
    • 서로 다른 자료 형이지만 공용체를 사용하면 주어진 일정한 메모리를 함께 사용이 가능하다.

     

    🔔 ex) 공용체 변수의 선언의 예

    NUMBER num;

    NUMBER allnumber[20];

    NUMBER *numptr;

     

    • 공용체 멤버의 접근은 구조체와 같은 방법이다.

    numptr = #

    numptr → inum = 32;

    unm.funm = 23.8;

    num.inum = 12;

     

     

    🔔 예) union 공용체의 형태

     

    실행 결과

     

     

     

    const 와 volatile

    • const는 변수나 인수의 선언에서 사용된다.
    • 변수의 값이 수정될 수 없다.
    • 함수의 인수에서 선언되었을 경우 함수내에서 인수의 값을 수정할 수 없다.
    • apple의 값은 프로그램 내에 바뀔 수 없다.

    const int apple;

    const int banana = 24;

    &nbsp

    • banana처럼 초기화는 가능.
    • banana는 매크로의 정의와 같은 의미다.

    #define BANANA 24

     

     

    [포인터의 경우]

    const int *ip;

     

    • const는 바로 다음의 int를 제한.
    • ip값은 변할 수 있지만 항상 정수형 상수를 가리켜야 한다.

    int *const ip;

     

    • const 는 바로 다음의 ip를 제한 한다.
    • ip의 값은 변할 수 없기 때문에 항상 같은 번지를 가리킨다.

    const int * const ip;

     

    • int 와 ip가 모두 const에 의해서 제한.
    • ip는 항상 같은 번지를 가리키고 그번지에 저장된 값도 수정될 수 없다.

     

     

     

    비트 연산자

    • 비트연산이란 0과 1로 표현되는 이진수의 각 비트를 대상으로 하는 연산을 말한다.

     

     

     

     

    조건 연산자

    수식1 ? 수식2: 수식3    // 3항 연산자

     

    • 수식 1이 참이면 수식2의 값을 가지고, 거짓이면 수식3의 값을 갖는다.

    if (a < b) max = b;

    else max = a;

     

    • 위를 조건연산자로 표현하면 아래와 같다.

    max = (a < b) ? b : a;

     

     

    🔔 예) 조건 연산자 사용 예

     

    실행 결과

     

     

     

    do-while 문

    do 명령문 while(논리식);

     

    • 조건을 따지지않고 한번은 실행해 준다.

     

     

    label과 goto문

    goto 레이블;

    .

    .

    .

    레이블 : 명령문;

     

    • 레이블이 명시된 위치로 옮긴다.

     

     

     

     

     

    728x90
    반응형
상단으로