C - Misc Operators: A Friendly Guide for Beginners

안녕하세요, 미래의 프로그래머 여러분! 오늘 우리는 C 언어의 다양한 부수 연산자들에 대한 흥미로운 여정을 시작할 것입니다. 프로그래밍에 처음이라면 걱정하지 마세요 - 저는 여러분의 친절한 안내자가 되어, 모든 것을 단계별로 설명해 드리겠습니다. 그럼 시작해 볼까요!

C - Misc Operators

The sizeof Operator in C

여러분이 여행을 준비할 때, 각 아이템이 차지하는 공간을 알고 싶은 기분을 상상해 보세요. C 언어의 sizeof 연산자는 바로 그런 일을 합니다 - 프로그램에서의 대상의 크기를 알려줍니다!

sizeof 연산자는 그 연산자의 피 연산자의 크기를 (바이트 단위로) 반환합니다. 다음은 그 사용법입니다:

#include <stdio.h>

int main() {
int number = 42;
char letter = 'A';

printf("Size of int: %zu bytes\n", sizeof(int));
printf("Size of char: %zu bytes\n", sizeof(char));
printf("Size of number variable: %zu bytes\n", sizeof(number));
printf("Size of letter variable: %zu bytes\n", sizeof(letter));

return 0;
}

이 코드를 실행하면 다음과 같은 것을 볼 수 있습니다:

Size of int: 4 bytes
Size of char: 1 byte
Size of number variable: 4 bytes
Size of letter variable: 1 byte

과 같이, sizeof는 데이터 타입과 변수 모두에 사용할 수 있습니다. 데이터가 얼마나 많은 메모리를 사용하는지 정확히 알고 싶을 때 매우 유용합니다!

Address-of Operator in C

이제 주소 연산자에 대해 이야기해 보겠습니다. 주소 연산자는 앰퍼샌드(&)로 표시됩니다. 컴퓨터의 메모리를 큰 아파트 빌딩으로 생각해 보세요. 각 아파트(메모리 위치)는 고유한 주소를 가지고 있습니다. & 연산자는 이러한 주소를 찾는 데 도움을 줍니다!

다음은 간단한 예제입니다:

#include <stdio.h>

int main() {
int age = 25;
printf("Value of age: %d\n", age);
printf("Address of age: %p\n", (void*)&age);

return 0;
}

이 outputs는 다음과 같은 것을 출력합니다:

Value of age: 25
Address of age: 0x7ffd5e7e9994

정확한 주소는 컴퓨터마다 다르지만, 개념은 이해하실 수 있을 것입니다!

The Dereference Operator in C

주소 연산자(&)가 무엇이 어디에 있는지 찾는 것에 관한 것이면, 참조 연산자(*)는 그 주소를 방문하고 거기에 있는 것을 확인하는 것입니다. "저 주소가 있으니, 그 안에 무엇이 있는가?"라고 말하는 것과 같습니다.

다음은 그것을 행동으로 보이는 예제입니다:

#include <stdio.h>

int main() {
int cookies = 5;
int *p_cookies = &cookies;

printf("Value of cookies: %d\n", cookies);
printf("Address of cookies: %p\n", (void*)&cookies);
printf("Value of p_cookies: %p\n", (void*)p_cookies);
printf("Value at *p_cookies: %d\n", *p_cookies);

return 0;
}

Output:

Value of cookies: 5
Address of cookies: 0x7ffd5e7e9994
Value of p_cookies: 0x7ffd5e7e9994
Value at *p_cookies: 5

*p_cookiesp_cookies가 가리키는 주소에 저장된 값을 반환하는 것을 보셨나요? 그것이 참조 연산입니다!

The Ternary Operator in C

ternary 연산자는 축약된 if-else 문입니다. 조건에 따라 값을 할당하고 싶을 때 완벽합니다. 문법은 다음과 같습니다:

condition ? value_if_true : value_if_false

다음은 예제입니다:

#include <stdio.h>

int main() {
int age = 20;
char *status = (age >= 18) ? "adult" : "minor";

printf("At %d, you are an %s.\n", age, status);

return 0;
}

Output:

At 20, you are an adult.

이렇게 멋지지 않나요? 질문을 하고 두 가지 가능한 답 중 하나를 얻는 것과 같습니다!

The Dot (.) Operator in C

점 연산자는 구조체의 멤버에 접근할 때 사용됩니다. 구조체는 다양한 타입의 항목을 담을 수 있는 컨테이너로 생각할 수 있습니다.

다음은 예제입니다:

#include <stdio.h>

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

int main() {
struct Person john = {"John Doe", 30};

printf("Name: %s\n", john.name);
printf("Age: %d\n", john.age);

return 0;
}

Output:

Name: John Doe
Age: 30

우리는 점 연산자를 사용하여 Person 구조체의 nameage에 접근합니다.

The Indirection Operator in C

참조 연산자는 앞서 설명한 참조 연산자(*)와 같습니다. "간접"이라는 이름은 포인터를 통해 간접적으로 값을 접근할 수 있기 때문입니다.

다음은 약간 더 복잡한 예제입니다:

#include <stdio.h>

int main() {
int x = 10;
int *p = &x;
int **pp = &p;

printf("Value of x: %d\n", x);
printf("Value of *p: %d\n", *p);
printf("Value of **pp: %d\n", **pp);

return 0;
}

Output:

Value of x: 10
Value of *p: 10
Value of **pp: 10

여기서 우리는 여러 단계의 간접 참조를 사용하고 있습니다. pp는 포인터의 포인터입니다!

그럼 이제 C의 모든 부수 연산자를 다 봤습니다. 연습이 완벽을 만든다고 생각하니, 이 연산자들을 자신의 코드에서 실험해 보지 마세요. 행복하게 코딩하세요!

연산자 이름 예제 설명
sizeof 크기 sizeof(int) 타입이나 변수의 바이트 크기 반환
& 주소 &variable 변수의 메모리 주소 반환
* 참조 *pointer 포인터가 가리키는 값에 접근
? : 삼항 condition ? value1 : value2 조건부 할당
. structure.member 구조체의 멤버에 접근
* 간접 *pointer 포인터를 통해 간접적으로 값에 접근

Credits: Image by storyset