본문 바로가기

카테고리 없음

C 타입 선언시 연산자의 의미

타입 선언시 연산자가 복잡해지면 의미를 해석하기가 쉽지 않다.

해석 할때 기본적인 룰은 아래와 같다.

  • 역참조 연산자 *의 의미는 다음과 같다.

    - 지금까지 읽은 것은 타입의 주소

    - 앞으로 읽은 것은 그 주소가 가리키는 대상의 타입

  • 배열 연산자 [] 의 의미는 다음과 같다.

    - 지금까지 읽은 것은 배열

    - 앞으로 읽은 것은 배열의 원소 하나의 타입

  • 함수 연산자()의 의미는 다음과 같다.

    - 지금까지 읽은 것은 함수

    - 앞으로 읽은 것은 함수의 리턴 타입

여기서 주의 해야 할것이 있는데, 해석시 연산자의 해석 순위이다.

() [] . ->  (가장 높음)

단항 연산자

* / %

+ -

크기 비교

논리 연산  ! && ||

대입 (가장 낮음)

타입 선언 읽기의 예 #1

char * (*a) [10]

1) 이름은 a

2) a의 타입은 주소

3) 그 주소가 가르키는 것은 배열

4) 배열의 원소는 주소

5) 배열의 원소인 주소가 가르키는 것은 char


예제)

void main(void)
{
    char *(*a)[3];
    char *b[3];
    b[0] = "apple";
    b[1] = "banana";
    b[2] = "orange";
    a = &b;
   
    for (int i = 0; i < 3; i++)
    {
        printf_s("%s\r\n", b[i]);
        printf_s("%s\r\n", (*a)[i]);       
    }
   
}

apple, banana, orange가 차례로 찍힌다.

타입 선언 읽기의 예 #2

int (* b[5])(int);


1) 이름은 b

2) b의 타입은 배열

3) 배열의 원소는 주소이다.

4) 배열의 원소인 주소가 가르키는 것은 함수다.

5) 함수의 리턴 타입은 int

타입 선언 읽기의 예 #3

char (* encrypt (char (*)[10]))[10];

1) 이름은 encrypt

2) encrypt는 함수

3) 함수의 리턴 타입은 주소

4) 그 주소가 가르키는것은 배열

5) 배열의 원소는 char