C : Variable and Data Type πŸ•

m_ngyeongΒ·2024λ…„ 9μ›” 26일
0

C

λͺ©λ‘ 보기
4/16
post-thumbnail

Variable and Data Type

C μ–Έμ–΄μ—μ„œ λ³€μˆ˜μ™€ μžλ£Œν˜•μ€ ν”„λ‘œκ·Έλž¨μ˜ 데이터λ₯Ό μ €μž₯ν•˜κ³  μ²˜λ¦¬ν•˜λŠ” κΈ°λ³Έ μš”μ†Œμ΄λ‹€. λ˜ν•œ, 지역 λ³€μˆ˜, μ „μ—­ λ³€μˆ˜, static λ³€μˆ˜λŠ” λ³€μˆ˜κ°€ ν”„λ‘œκ·Έλž¨μ—μ„œ μ–΄λ–»κ²Œ μ‚¬μš©λ˜κ³ , λ©”λͺ¨λ¦¬μ™€ μŠ€μ½”ν”„μ— 따라 μ–΄λ–»κ²Œ λ™μž‘ν•˜λŠ”μ§€λ₯Ό κ²°μ •ν•˜λŠ” μ€‘μš”ν•œ κ°œλ…λ“€μ΄λ‹€.


🌱 λ³€μˆ˜(Variable)

λ³€μˆ˜λŠ” 데이터λ₯Ό μ €μž₯ν•  수 μžˆλŠ” 이름을 가진 λ©”λͺ¨λ¦¬ 곡간이닀. C μ–Έμ–΄μ—μ„œ λ³€μˆ˜λ₯Ό μ„ μ–Έν•  λ•ŒλŠ” ν•΄λ‹Ή λ³€μˆ˜μ˜ μžλ£Œν˜•μ„ 지정해야 ν•˜λ©°, μ΄λŠ” κ·Έ λ³€μˆ˜κ°€ μ €μž₯ν•  수 μžˆλŠ” λ°μ΄ν„°μ˜ μ’…λ₯˜λ₯Ό κ²°μ •ν•œλ‹€.
λ³€μˆ˜λŠ” 메인 λ©”λͺ¨λ¦¬μ— λ§Œλ“€μ–΄μ§€λ©°, λ³€μˆ˜ 이름을 μ‚¬μš©ν•˜μ—¬ λ©”λͺ¨λ¦¬ 곡간을 μ‚¬μš©ν•˜κ²Œ λœλ‹€.

μƒμˆ˜(Constant)

μƒμˆ˜λŠ” μ €μž₯된 κ°’μ˜ 변경이 λΆˆκ°€λŠ₯ν•œ λ©”λͺ¨λ¦¬ 곡간이닀. 즉, μ‹€ν–‰ 도쀑에 값이 λ³€κ²½λ˜μ§€ μ•ŠλŠ”λ‹€.

🌱 μžλ£Œν˜•(Data Type)

C μ–Έμ–΄μ˜ μžλ£Œν˜•μ€ 크게 κΈ°λ³Έ μžλ£Œν˜•, νŒŒμƒ μžλ£Œν˜•, 그리고 μ‚¬μš©μž μ •μ˜ μžλ£Œν˜•μœΌλ‘œ λ‚˜λ‰œλ‹€.

κΈ°λ³Έ μžλ£Œν˜•

C μ–Έμ–΄μ—μ„œ κΈ°λ³Έ μžλ£Œν˜•, 즉 κΈ°λ³Έ (제곡) ν˜•μ‹μ€ C μ–Έμ–΄ ν‘œμ€€μ— μ˜ν•΄ μ§€μ •λ˜λ©° μ»΄νŒŒμΌλŸ¬μ— κΈ°λ³Έ μ œκ³΅λœλ‹€. κΈ°λ³Έ ν˜•μ‹μ€ 헀더 νŒŒμΌμ— μ •μ˜λ˜μ§€ μ•Šκ³ , μ •μˆ˜, 뢀동 μ†Œμˆ˜μ  및 void의 μ„Έ 가지 κΈ°λ³Έ λ²”μ£Όλ‘œ λ‚˜λ‰œλ‹€. λŒ€λΆ€λΆ„μ˜ κΈ°λ³Έ ν˜•μ‹μ€ μ»΄νŒŒμΌλŸ¬μ—μ„œ 고유 ν˜•μ‹μœΌλ‘œ μ²˜λ¦¬λ˜μ§€λ§Œ, 일뢀 ν˜•μ‹μ€ λ™μ˜μ–΄μ΄κ±°λ‚˜ μ»΄νŒŒμΌλŸ¬μ—μ„œ λ™λ“±ν•œ ν˜•μ‹μœΌλ‘œ μ²˜λ¦¬λœλ‹€.

πŸ–€ void

voidλŠ” 빈 κ°’ 집합을 μ„€λͺ…ν•˜λ©°, ν˜•μ‹ void의 λ³€μˆ˜λ₯Ό 지정할 수 μ—†λ‹€.
void ν˜•μ‹μ€ 주둜 값을 λ°˜ν™˜ν•˜μ§€ μ•ŠλŠ” ν•¨μˆ˜λ₯Ό μ„ μ–Έν•˜κ±°λ‚˜ ν˜•μ‹ν™”λ˜μ§€ μ•Šκ±°λ‚˜ μž„μ˜λ‘œ ν˜•μ‹ν™”λœ 데이터에 λŒ€ν•œ μ œλ„€λ¦­ 포인터λ₯Ό μ„ μ–Έν•˜λŠ”λ° μ‚¬μš©λœλ‹€.

  • std::nullptr_t : ν‚€μ›Œλ“œ nullptrλŠ” λͺ¨λ“  μ›μ‹œ 포인터 ν˜•μ‹μœΌλ‘œ λ³€ν™˜ν•  수 μžˆλŠ” ν˜•μ‹ std::nullptr_t의 null 포인터 μƒμˆ˜.

μ œλ„€λ¦­ ν”„λ‘œκ·Έλž˜λ°(generic programming)
데이터 ν˜•μ‹μ— μ˜μ‘΄ν•˜μ§€ μ•Šκ³ , ν•˜λ‚˜μ˜ 값이 μ—¬λŸ¬ λ‹€λ₯Έ 데이터 νƒ€μž…λ“€μ„ κ°€μ§ˆ 수 μžˆλ„λ‘ ν•˜λŠ” ν”„λ‘œκ·Έλž˜λ° 방식이닀.
즉, ν”„λ‘œκ·Έλž˜λ¨Έκ°€ μ–΄λ–€ μžλ£Œν˜•μ„ μ‚¬μš©ν•  지 미리 μ•Œ 수 μ—†κΈ° λ•Œλ¬Έμ— μ–΄λ–€ μžλ£Œν˜•μ΄λ“  상관없이 μ‹€ν–‰ν•  수 μžˆλ„λ‘ ν”„λ‘œκ·Έλž˜λ°ν•œ 것이닀.

πŸ–€ bool(true / false)

bool ν˜•μ‹μ—λŠ” bool의 κ°’ true와 falseκ°€ μžˆλ‹€.

πŸ–€ 문자(char)

char은 문자 ν‘œν˜„ ν˜•μ‹μœΌλ‘œ ν•œ 개의 문자λ₯Ό μ €μž₯ν•œλ‹€.
C μ»΄νŒŒμΌλŸ¬λŠ” char, signed char 및 unsigned char ν˜•μ‹μ˜ λ³€μˆ˜λ₯Ό μ„œλ‘œ λ‹€λ₯Έ ν˜•μ‹μœΌλ‘œ μ²˜λ¦¬ν•œλ‹€.

πŸ–€ μ •μˆ˜(short / int / long)

κΈ°λ³Έ μ •μˆ˜ ν˜•μ‹μ€ int둜 μ •μˆ˜λ₯Ό μ €μž₯ν•œλ‹€. κ΅¬ν˜„λ³„ λ²”μœ„μ— λŒ€ν•œ λͺ¨λ“  μ •μˆ˜λ₯Ό λ‚˜νƒ€λ‚Ό 수 μžˆλ‹€.

뢀인 μ •μˆ˜ ν‘œν˜„μ€ μ–‘μˆ˜ κ°’κ³Ό 음수 값을 λͺ¨λ‘ λ³΄μœ ν•  수 μžˆλŠ” μ •μˆ˜ ν‘œν˜„μœΌλ‘œ ν•œμ •μž ν‚€μ›Œλ“œ signedλ₯Ό μ‚¬μš©ν•œλ‹€. unsigned ν•œμ •μž ν‚€μ›Œλ“œλŠ” μŒμˆ˜κ°€ μ•„λ‹Œ κ°’λ§Œ λ³΄μœ ν•  수 μžˆλŠ” λΆ€ν˜Έ μ—†λŠ” ν‘œν˜„μ„ 지정할 λ•Œ μ‚¬μš©ν•œλ‹€.

크기 ν•œμ •μžλŠ” μ‚¬μš©λœ μ •μˆ˜ ν‘œν˜„μ˜ λ„ˆλΉ„λ₯Ό λΉ„νŠΈ λ‹¨μœ„λ‘œ μ§€μ •ν•œλ‹€. C μ–Έμ–΄μ—λŠ” long, long long, shortλ₯Ό 크기 ν•œμ •μžλ‘œ μ§€μ›ν•œλ‹€.
1 == sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long) <= sizeof(long long)


ν˜•μ‹ μ΄λ¦„ν¬κΈ°μΆœλ ₯ μžλ£Œν˜•κΈ°νƒ€ μ΄λ¦„κ°’μ˜ λ²”μœ„
bool1byte(8bit)true / false
char1byte(8bit)%c(문자) / %s(문자duf)–128 ~ 127(κΈ°λ³Έκ°’)
int4byte(32bit)%dsigned-2,147,483,648 ~ 2,147,483,647
unsigned int4byteunsigned0 ~ 4,294,967,295
short2byte(16bit)short int, signed short int-32,768 ~ 32,767
unsigned short2byteunsigned short int0 ~ 65,535
long4byte(32bit)long int, signed long int-2,147,483,648 ~ 2,147,483,647
unsigned long4byteunsigned long int0 ~ 4,294,967,295
long long8byte(64bit)(__int64와 동일)-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
unsigned long long8byte(unsigned __int64와 동일)0 ~ 18,446,744,073,709,551,615
enum닀양함

πŸ–€ 뢀동 μ†Œμˆ˜μ (float / double)

'뢀동 μ†Œμˆ˜μ ' ν˜•μ‹μ€ IEEE-754 ν‘œν˜„μ„ μ‚¬μš©ν•˜μ—¬ κ΄‘λ²”μœ„ν•œ 크기의 μ†Œμˆ˜ 자릿수 값을 κ·Όμ‚¬κ°’μœΌλ‘œ μ œκ³΅ν•œλ‹€. λ˜ν•œ, μ†Œμˆ˜ 뢀뢄이 μžˆμ„ 수 μžˆλŠ” 값을 지정할 수 μžˆλ‹€.

  • float : C μ–Έμ–΄μ—μ„œ κ°€μž₯ μž‘μ€ 뢀동 μ†Œμˆ˜μ (μ‹€μˆ˜)λ₯Ό μ €μž₯
printf("%f", 0.123456789);  // 좜λ ₯: 0.1234567
printf("%.2f", 3.14159);  // 좜λ ₯: 3.14

printf("%e", 0.123456789);  // 좜λ ₯: 1.234568e-001
  • double : float 보닀 μ •λ°€ν•œ μ‹€μˆ˜λ₯Ό μ €μž₯
printf("%lf", 3.14159265358979);  // 좜λ ₯: 3.141593
  • long double : double 보닀 ν¬κ±°λ‚˜ 같은 뢀동 μ†Œμˆ˜μ 
ν˜•μ‹ μ΄λ¦„λ°”μ΄νŠΈμΆœλ ₯ μžλ£Œν˜•κ°’μ˜ λ²”μœ„
float4byte%f-3.4E +/- 38(7자리 숫자)
double8byte%lf1.7E +/- 308(15자리 숫자)
long double8byte1.7E +/- 308(15자리 숫자)

νŒŒμƒ μžλ£Œν˜•

  • Array(λ°°μ—΄): λ™μΌν•œ μžλ£Œν˜•μ˜ μ—¬λŸ¬ 값을 μ €μž₯ν•˜λŠ” μžλ£Œν˜•
int arr[5] = {1, 2, 3, 4, 5};  // μ •μˆ˜ λ°°μ—΄
  • Pointer(포인터): λ‹€λ₯Έ λ³€μˆ˜μ˜ μ£Όμ†Œλ₯Ό μ €μž₯ν•˜λŠ” μžλ£Œν˜•
int num = 10;
int *p = &num;  // num λ³€μˆ˜μ˜ μ£Όμ†Œλ₯Ό μ €μž₯

μ‚¬μš©μž μ •μ˜ μžλ£Œν˜•

  • struct(ꡬ쑰체) : λ‹€μ–‘ν•œ μžλ£Œν˜•μ„ ν•œλ° λ¬Άμ–΄ ν•˜λ‚˜μ˜ μžλ£Œν˜•μ²˜λŸΌ μ‚¬μš©
struct Person {
    char name[50];
    int age;
};

μš”μ•½

  • λ³€μˆ˜λŠ” 데이터λ₯Ό μ €μž₯ν•  수 μžˆλŠ” λ©”λͺ¨λ¦¬ 곡간이고, μžλ£Œν˜•μ€ κ·Έ λ³€μˆ˜κ°€ μ €μž₯ν•  λ°μ΄ν„°μ˜ μ’…λ₯˜λ₯Ό κ²°μ •.
  • 좜λ ₯ 포맷은 printfλ₯Ό μ‚¬μš©ν•˜μ—¬ 데이터λ₯Ό μ›ν•˜λŠ” ν˜•μ‹μœΌλ‘œ 좜λ ₯ν•  수 있게 λ„μ™€μ€Œ.


μ°Έκ³ ,
https://learn.microsoft.com/ko-kr/cpp/cpp/fundamental-types-cpp?view=msvc-170,
https://learn.microsoft.com/ko-kr/cpp/cpp/data-type-ranges?view=msvc-170

profile
μ‚¬μš©μž κ²½ν—˜ ν–₯상과 지속적인 μ„±μž₯을 μΆ”κ΅¬ν•˜λŠ” ν”„λ‘ νŠΈμ—”λ“œ 개발자 ΚšΘ‰Ιž

0개의 λŒ“κΈ€