C - 데이터 타입
안녕하세요, 미래의 프로그래머 여러분! C 프로그래밍의 세상으로 흥미로운 여정을 시작해보세요. 오늘 우리는 C의 데이터 타입에 대해 탐구해보겠습니다. 프로그래밍 초보자라도 걱정하지 마세요; 저는 친절한 안내자가 되어, 이 주제를 단계별로 풀어나가겠습니다. 그럼 좋아하는 음료를 한 잔 챙겨, 편안하게 앉아 읽어보세요!
C에서의 정수 데이터 타입
우리가 모두 익숙한 것으로 시작해보겠습니다 - 정수입니다. C에서는 이를 정수(integers)라고 부르며, 다양한 크기와 종류가 있습니다.
기본 정수 타입
가장 일반적인 정수 타입의 표를 보여드리겠습니다:
데이터 타입 | 크기 (바이트) | 범위 |
---|---|---|
char | 1 | -128에서 127 또는 0에서 255 |
short | 2 | -32,768에서 32,767 |
int | 4 | -2,147,483,648에서 2,147,483,647 |
long | 4 또는 8 | -2,147,483,648에서 2,147,483,647 또는 -9,223,372,036,854,775,808에서 9,223,372,036,854,775,807 |
이제 이를 실제로 보겠습니다:
#include <stdio.h>
int main() {
char my_char = 65;
short my_short = 32000;
int my_int = 2000000000;
long my_long = 9000000000L;
printf("char: %c\n", my_char);
printf("short: %d\n", my_short);
printf("int: %d\n", my_int);
printf("long: %ld\n", my_long);
return 0;
}
이 코드를 실행하면 다음과 같은 결과를 볼 수 있습니다:
char: A
short: 32000
int: 2000000000
long: 9000000000
이를 해석해보면:
-
char
값 65는 ASCII 표에서 'A'에 해당합니다. 놀라운 일!char
는 숫자도 저장할 수 있습니다! -
short
와int
는 중간 크기의 숫자로 기대대로 작동합니다. -
long
의 경우, 끝에 'L'을 추가하여 C에 이는 큰 숫자임을 알립니다.
부호 없는 정수
때로는 양수만 필요할 때가 있습니다. 그때 부호 없는 정수가 유용합니다:
unsigned char my_uchar = 255;
unsigned short my_ushort = 65000;
unsigned int my_uint = 4000000000U;
printf("unsigned char: %u\n", my_uchar);
printf("unsigned short: %u\n", my_ushort);
printf("unsigned int: %u\n", my_uint);
출력:
unsigned char: 255
unsigned short: 65000
unsigned int: 4000000000
unsigned
를 사용하면 동일한 메모리 공간에 더 큰 양수를 저장할 수 있습니다. 마법 같은 것처럼 보일 수 있지만, 이는 비트의 지혜로운 사용입니다!
C에서의 부동소수점 데이터 타입
이제 소수점 숫자의 세상으로 이동해보겠습니다. C는 세 가지 부동소수점 타입을 제공합니다:
데이터 타입 | 크기 (바이트) | 정밀도 |
---|---|---|
float | 4 | 6-7 십진 자리 |
double | 8 | 15-16 십진 자리 |
long double | 16 | 19-20 십진 자리 |
이제 이를 실제로 보겠습니다:
#include <stdio.h>
int main() {
float pi_float = 3.14159265358979323846f;
double pi_double = 3.14159265358979323846;
long double pi_long_double = 3.14159265358979323846L;
printf("float: %.7f\n", pi_float);
printf("double: %.16f\n", pi_double);
printf("long double: %.20Lf\n", pi_long_double);
return 0;
}
출력:
float: 3.1415927
double: 3.1415926535897931
long double: 3.14159265358979323846
float
는 7 자리 이후에서 정밀도를 잃고, double
와 long double
는 더 많은 정확성을 유지합니다. 디지털 사진을 확대할 때와 같은 느낌입니다 - 어떤 시점에서는 픽셀을 볼 수 있게 됩니다!
사용자 정의 데이터 타입
C는 우리가 자신의 데이터 타입을 만들도록 허용합니다. 요리사가 자신의 레시피를 만드는 것처럼!
구조체
구조체는 관련된 데이터를 함께 그룹화할 수 있습니다:
#include <stdio.h>
#include <string.h>
struct Student {
char name[50];
int age;
float gpa;
};
int main() {
struct Student alice;
strcpy(alice.name, "Alice");
alice.age = 20;
alice.gpa = 3.8;
printf("Name: %s\n", alice.name);
printf("Age: %d\n", alice.age);
printf("GPA: %.1f\n", alice.gpa);
return 0;
}
출력:
Name: Alice
Age: 20
GPA: 3.8
여기서 우리는 Student
타입을 만들어 이름, 나이, 평점을 함께 저장할 수 있습니다. 학생 정보 양식을 만드는 것과 같은 느낌입니다!
열거형
열거형은 이름이 지정된 상수를 만드는 데 유용합니다:
#include <stdio.h>
enum Days {SUN, MON, TUE, WED, THU, FRI, SAT};
int main() {
enum Days today = WED;
printf("Today is day number %d\n", today);
return 0;
}
출력:
Today is day number 3
열거형은 자동으로 0에서 시작하여 증가하는 정수 값을 할당합니다. 이름을 지정한 숫자처럼입니다!
C에서의 void 데이터 타입
void
는 C의 특별한 타입입니다. 그것은 공백의 캔버스처럼 - 데이터의 부재를 나타냅니다. 주로 세 가지 상황에서 사용됩니다:
-
함수가 아무것도 반환하지 않음:
void sayHello() { printf("Hello, World!\n"); }
-
함수가 매개변수를 받지 않음:
int getRandomNumber(void) { return 4; // 공정한 주사위 굴림으로 선택된 숫자. 확실하게 무작위입니다. }
-
일반 포인터 (포인터 섹션에서 다룰 것)
C에서의 배열 데이터 타입
배열은 같은 타입의 값이 저장되는 비둘기집 같은 것입니다:
#include <stdio.h>
int main() {
int scores[5] = {85, 92, 78, 90, 88};
printf("First score: %d\n", scores[0]);
printf("Last score: %d\n", scores[4]);
float average = 0;
for(int i = 0; i < 5; i++) {
average += scores[i];
}
average /= 5;
printf("Average score: %.2f\n", average);
return 0;
}
출력:
First score: 85
Last score: 88
Average score: 86.60
C에서는 배열 인덱스가 0에서 시작합니다. 유럽의 건물 층수처럼 - 지하 층은 0입니다!
C에서의 포인터 데이터 타입
포인터는 메모리의 위치를 가리키는 표지 같은 것입니다. 그들은 강력하지만, 조심스럽게 다루어야 합니다:
#include <stdio.h>
int main() {
int x = 10;
int *p = &x;
printf("Value of x: %d\n", x);
printf("Address of x: %p\n", (void*)&x);
printf("Value of p: %p\n", (void*)p);
printf("Value pointed by p: %d\n", *p);
*p = 20;
printf("New value of x: %d\n", x);
return 0;
}
출력 (주소는 변합니다):
Value of x: 10
Address of x: 0x7ffd5e8e3964
Value of p: 0x7ffd5e8e3964
Value pointed by p: 10
New value of x: 20
여기서 p
는 x
의 주소를 저장하는 포인터입니다. *p
를 사용하여 해당 주소에 저장된 값을 접근하거나 변경할 수 있습니다. x
의 원격 컨트롤러처럼!
그렇게 해서! 우리는 C의 주요 데이터 타입을 다루었습니다. 데이터 타입을 이해하는 것은 메모리를 효율적으로 관리하고 버그를 피하는 데 필수적입니다. 계속 연습하면 곧 이 타입들을 마스터하게 될 것입니다! 행복한 코딩을 기원합니다!
Credits: Image by storyset