C 기본 문법 – 연산자 – 5 – 기타 연산자

C 기본 문법 – 연산자 – 5편: 기타 연산자 완전 정복

안녕하세요, 코딩 여정을 멋지게 걸어가고 계신 여러분 😊
오늘은 C 언어의 모든 연산자 시리즈의 마지막 편!
바로 **기타 연산자(Other Operators)**에 대해 자세히 알아볼 시간이에요.

앞서 배운 산술, 관계, 논리, 비트, 대입 연산자 외에도
C 언어에는 유용하고 실전에서 꼭 필요한 다양한 연산자들이 존재한답니다!

이 연산자들은 마치 도구함 속의 특수 공구처럼
상황에 맞게 사용하면 코드를 더 효율적이고 똑똑하게 만들 수 있는 비밀 무기가 되죠! 🔧

그럼 지금부터 예시와 함께 쉽게 풀어볼게요!


기타 연산자 목록

연산자 이름 설명
sizeof 크기 연산자 자료형 또는 변수의 메모리 크기 (byte 단위) 반환
?: 삼항(조건) 연산자 조건에 따라 다른 값을 반환
, 콤마 연산자 여러 표현식을 한 줄에 실행
& 주소 연산자 변수의 메모리 주소를 반환
* 포인터 연산자 해당 주소가 가리키는 값을 참조
-> 구조체 포인터 접근 구조체 포인터가 멤버에 접근할 때 사용
. 구조체 멤버 접근 구조체 변수에서 멤버에 접근할 때 사용
[] 배열 인덱스 연산자 배열에서 특정 요소에 접근
() 함수 호출 연산자 함수 호출 시 사용

1. sizeof 연산자

데이터 타입이나 변수의 크기를 바이트 단위로 알려줍니다.

#include <stdio.h>

int main() {
    int a = 10;
    printf("int 크기: %lu 바이트
", sizeof(int));
    printf("a의 크기: %lu 바이트
", sizeof(a));
    return 0;
}

🧠 실전 팁

  • 메모리 최적화에 유용
  • 동적 메모리 할당 시 꼭 필요 (malloc 사용 시)

2. 삼항(조건) 연산자 ?:

if-else를 짧게 표현할 수 있는 방법입니다.

int age = 20;
char *msg = (age >= 19) ? "성인입니다" : "미성년자입니다";
printf("%s
", msg);

📌 구조

조건식 ? 참일 때 값 : 거짓일 때 값;

🎯 코드를 간결하게 만들고 싶을 때 강력 추천!


3. 콤마 연산자 ,

여러 표현식을 한 줄에서 순차적으로 실행합니다.

int x;
x = (printf("1 "), printf("2 "), 10);  // 1 2 출력, x에는 10 저장

⚠️ 마지막 표현식의 결과만 반환된다는 점 유의하세요!


4. 주소 연산자 &

변수의 메모리 주소를 얻을 때 사용합니다.

int a = 5;
printf("a의 주소: %p
", &a);

💡 포인터를 다룰 때 반드시 등장하는 필수 연산자입니다!


5. 포인터 연산자 *

포인터가 가리키는 주소의 값을 참조합니다.

int a = 10;
int *p = &a;
printf("p가 가리키는 값: %d
", *p);  // 10
  • *는 포인터 선언 시에도 사용됩니다 (int *p)

🎯 “이 주소에 저장된 진짜 값을 보여줘!” 라고 말하는 거예요.


6. 구조체 멤버 접근 연산자 .->

struct Person {
    char name[20];
    int age;
};

struct Person p1 = {"홍길동", 30};
struct Person *p2 = &p1;

printf("%s
", p1.name);   // . 연산자
printf("%s
", p2->name);  // -> 연산자 (포인터용)

📌 구조체를 값으로 다룰 땐 .
구조체 포인터로 다룰 땐 ->


7. 배열 인덱스 연산자 []

배열의 특정 요소에 접근할 때 사용합니다.

int arr[3] = {10, 20, 30};
printf("두 번째 요소: %d
", arr[1]);  // 20

🎯 배열의 인덱스는 0부터 시작하니 항상 주의하세요!


8. 함수 호출 연산자 ()

함수 이름 뒤에 괄호를 붙이면 그 함수를 호출합니다.

int add(int a, int b) {
    return a + b;
}

int main() {
    printf("10 + 20 = %d
", add(10, 20));  // 30
}

이 연산자는 너무 자주 사용되어 오히려 ‘연산자’로 잘 안 느껴질 수도 있어요 😊


✅ 기타 연산자 요약 표

연산자 의미 예시 설명
sizeof 크기 확인 sizeof(int) int의 바이트 수 반환
?: 조건 분기 a > b ? a : b 삼항 연산자
, 표현식 나열 a = (b++, c++) 마지막 값만 반환
& 주소 &a 변수 주소 추출
* 포인터 참조 *p 주소에 저장된 값
. 구조체 접근 p.name 구조체 변수의 멤버
-> 구조체 포인터 접근 p->name 포인터로 구조체 접근
[] 배열 접근 arr[0] 배열의 요소
() 함수 호출 f(x) 함수 실행

⚠️ 기타 연산자 사용 시 주의할 점

주의사항 설명
sizeof는 타입, 변수 둘 다 가능 괄호 생략 가능하지만 혼동 방지 위해 붙이세요
삼항 연산자 남용 금지 너무 복잡하게 쓰면 오히려 가독성 저하
콤마 연산자 우선순위 낮음 괄호로 감싸서 의도 명확히
포인터 *와 곱셈 * 혼동 금지 문맥을 잘 구분해야 해요
구조체 연산자 . vs -> 구분 구조체 포인터에서는 반드시 -> 사용

마무리하며 💬

오늘 배운 기타 연산자들
초반에는 자주 안 보일 수도 있지만,
코드가 복잡해질수록 없어선 안 되는 도구들이에요!

특히 포인터 관련 연산자, 삼항 연산자, sizeof,
이 세 가지는 앞으로 포인터, 배열, 동적 메모리, 구조체를 배울 때 아주 자주 등장할 테니
꼭 확실히 익혀두시길 바랍니다! 😊

지금까지 C 언어의 기본 연산자 시리즈를 모두 마쳤어요! 🎉
여러분은 이제 숫자 계산부터 조건 판단, 메모리 다루기까지
연산자와 관련된 기초 체력을 완벽히 갖췄다고 할 수 있어요!

다음 시간부터는 조건문, 반복문 등 제어 흐름 구조로 넘어가 볼게요.
오늘도 함께 해주셔서 감사합니다! 코딩은 계속됩니다 💻✨

답글 남기기