티스토리 뷰

함수포인터

  • 함수명 앞에 *만 붙여주면 함수 포인터가 선언된다.

자료형(*함수 포인터 이름)(인자 목록)

int(*func)(int a);

  • 함수 포인터도 포인터이므로 주소값을 저장한다.(함수의 주소값만)

    int(*fptr) (int pa, int pb) ; <<함수포인

#include <stdio.h>

int plus(int a, int b){
return a+b;
}
int minus(int a, int b){
return a-b;
}
int main() {

    int a =10;
    int b = 20;
    
    int(*fptr) (int pa, int pb) ;
    
    fptr = plus;
    
    int result = fptr(a,b);

    printf("결과값 : %d\n", result);
}
#include <stdio.h>

int plus(int a, int b){
return a+b;
}
int minus(int a, int b){
return a-b;
}
int main() {

    int a = 10;
    int b = 20;
    
    int(*fptr) (int pa, int pb) ;
    
    fptr = minus;
    
    int result = fptr(a,b);

    printf("결과값 : %d\n", result);
}

    
 fptr = 여기에 플러스가 오는지 마이너스가 오는지에 따라 값이 달라짐, 코드를 바꾸지 않아도 함수포인터를 사용해 값을 변경할 수 있음.

 

구조체

  • 하나 이상의 서로 다른 종류의 변수들을 묶어서 새로운 데이터 타입을 정의하는 것

 

구조체를 사용하는 이유

  • 연관된 변수들을 하나로 묶어서 관리함으로써 데이터 관리에 유용하다.
  • 데이터 양(변수의 개수)이 많아지면 구조체가 유리하다.

 

** 문제 : 우리가 우체국에서 물건을 어디론가 보낼 때, 물건의 종류, 무게, 높이 등의 정보를 입력한다. 우리는 이러한 정보들을 갖고 있는 물건에 대한 구조체를 만들어 보자. 구조체 이름은 object라고 하고, 구조체 멤버로는 이름(name), 높이(hright), 무게(weight)를 갖는다, 구조체 변수를 하나 선언하고, 구조체 변수를 통해 각각의 멤버에 값을 대입한다. 대입하는 값은 사용자 입력이고, 입력이 끝나면 대입한 멤버의 값을 화면에 출력하도록 해라

 

물건의 이름 : 책

물건의 높이 : 30

물건의 무게 : 2

 

보낼 물건의 정보 : 책, 30cm, 2kg

struct object {
    char name[10];
    int h;
    int w;
};

int main() {
    struct object st1; // 구조체 변수 선언

    // 사용자 입력 받기
    scanf("%s %d %d", st1.name, &st1.h, &st1.w);

    // 출력
    printf("이름 : %s\n높이 : %d\n무게 : %d\n", st1.name, st1.h, st1.w);

    return 0;
}

공용체

  • 공용체도 사용자 정의 자료형이다.
  • 구조체와 차이점은 메모리 공간을 공유한다는 점이다.

 

열거형

  • 열거형은 enumeration의 약자로 enum이라고 읽는다.
  • 데이터들을 열거한 집합이다.
  • 컴파일러는 열거형 멤버들의 정수형 상수로 취급한다.
  • 키워드는 enum을 사용하여 정의한다
  • 열거형의 멤버들은 각 요일을 나타낸다.
  • 첫번째 멤버 sum을 0으로 설정하면 다음 멤버 mon은 1씩 증가한다.
  •  
#include<stdio.h>

enum Week{
sun = 1,
mon,
tue,
wed,
thu,
fri,
sat,
};
int main(){
    int day;
    printf("요일을 선택하세요 : ");
    scanf("%d", &day);

    switch (day) {
        case sun:
        printf("일요일은 짜파게티\n");
        break;
        case mon:
        printf("월요일\n");
        break;
        case tue:
        printf("화요일\n");
        break;
        case wed:
        printf("수요일\n");
        break;
        case thu:
        printf("목요일\n");
        break;
        case fri:
        printf("금요일\n");
        break;
        case sat:
        printf("토요일\n");
        break;
        default :
        printf("잘못 입력하셨습니다\n");
        break;    
            
    }
    return 0;
}

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/12   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함