기타 연산자

종류

연산자 명칭 기능
sizeof() 크기 연산 자료형이나 식(expression)이 차지하는 기억공간의 크기(byte) 를 반환
, 콤마 연산 하나의 식을 넣을 공간에 2개 이상의 식을 넣을 때 사용
콤마 연산식의 결과값은 마지막 식의 값이다.
& 주소 연산 피연산자의 주소를 구한다.
(추후에 포인터 단원에서 자세하게 설명한다.)
* 포인터 연산 포인터가 가리키는 곳 또는 그 곳의 내용
(추후에 포인터 단원에서 자세하게 설명한다.)

예시

sizeof 크기 연산자

1
2
3
4
5
6
7
8
void size_of_operator(){
    // 자료형이나 특정 값을 담은 식의 메모리상 크기(바이트)를 반환
    int a = 4;
    double b = 123.42;
    printf("sizeof(a)    : %d\n", sizeof(a));
    printf("sizeof(b)    : %d\n", sizeof(b));
    printf("sizeof(10/3) : %d\n\n", sizeof(10/3));
}
1
2
3
sizeof(a)    : 4
sizeof(b)    : 8
sizeof(10/3) : 4

, 콤마 연산자

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void comma_operator(){
    // 2개 이상의 식을 하나의 식으로 묶는 연산자
    // expr1, expr2
    int a = 0, b = 4;
    printf("a + b = %d\n\n", a + b);
    
    // 동일한 자료형 변수를 동시에 여러 개 선언할 때나
    // for 문과 같이 한 줄에 2개 이상의 식을 표현할 필요가 있을 때 주로 사용한다.
    for (int i = 0, j = 4; i <5; i++, j--){
        printf("(%d/5)[%d, %d]\n", i+1, i, j);
    }
    printf("\n");

    // 콤마 연산식의 결과값은 마지막 식의 값이다.
    int x = 1, y = 2, z;
    z = (x = x + 1, y = y + 1);
    printf("z : %d\n\n", z);
}
1
2
3
4
5
6
7
8
9
a + b = 4

(1/5)[0, 4]
(2/5)[1, 3]
(3/5)[2, 2]
(4/5)[3, 1]
(5/5)[4, 0]

z : 3 # y = y + 1 의 값이 들어옴

& 주소 연산자

1
2
3
4
5
6
7
8
void address_operator(){
    int value = 100;
    int *ptr_addr;
    ptr_addr = &value;
    printf("변수 value의 값: %d\n", value);
    printf("변수 value의 메모리 주소 (%%p): %p\n", &value);
    printf("포인터 ptr_addr에 저장된 주소 (%%p): %p\n", ptr_addr);
}
1
2
3
변수 value의 값: 100
변수 value의 메모리 주소 (%p): 0x16b946eec
포인터 ptr_addr에 저장된 주소 (%p): 0x16b946eec

* 포인터 연산자

1
2
3
4
5
6
7
8
9
void pointer_operator(){
    int data = 50;
    int *p;
    p = &data;
    int retrieved_value = *p;
    *p = 100;
    printf("포인터 p가 가리키는 값: %d\n", retrieved_value);
    printf("값 변경 후 data의 값: %d\n", data);
}
1
2
포인터 p 가리키는 : 50
 변경  data : 100

Reference

C 프로그래밍 (김형근, 곽덕훈, 정재화 공저)
C 프로그래밍 강의 (방송통신대 - 이병래)

Comments