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 언어의 기본 연산자 시리즈를 모두 마쳤어요! 🎉
여러분은 이제 숫자 계산부터 조건 판단, 메모리 다루기까지
연산자와 관련된 기초 체력을 완벽히 갖췄다고 할 수 있어요!
다음 시간부터는 조건문, 반복문 등 제어 흐름 구조로 넘어가 볼게요.
오늘도 함께 해주셔서 감사합니다! 코딩은 계속됩니다 💻✨