πμ μλ³μ/μ§μλ³μ
CμΈμ΄μ μ μλ³μλ mainν¨μ λ°κΉ₯μ μ μΈνλ€. ⇒ μ§μν κ².
μ μ λ³μλ static ν€μλλ‘ μ μΈνλ€. ν¨μκ° λλλ μλ©Έλμ§ μλλ€.
πν¬μΈν°
* ν€μλλ₯Ό λΆμ¬μ μ μΈνλ€. (κ°μ μ°μ°μμ λ€λ₯Έ μλ―Έλ₯Ό κ°μ§λ―λ‘ ν·κ°λ¦¬μ§ λ§ κ². ν¬μΈν°μμ λͺ μνλ ν€μλλ‘ μκ°νμ.)
int a = 1;
int *ptr = &a;
ν¬μΈν° λ³μλ λ©λͺ¨λ¦¬μ μ£Όμλ₯Ό κ°μ§λ€. μ£Όμ κ°μ μ μλ‘ λμ΄μμΌλ―λ‘ 4byteκ° λλ€. (λ¨, 64λΉνΈμ κ²½μ° 8byteκ° λ μ μλ€.)
& μ£Όμ μ°μ°μ: μ£Όμλ₯Ό λ°ννλ€.
* κ°μ μ°μ°μ: κ·Έ μ£Όμμ κ°μ κ°μ λ°ννλ€.
μ΄μ€ ν¬μΈν°(ν¬μΈν°μ ν¬μΈν°)
int a = 1;
int* ptr = &a;
int** ptrPtr = &ptr;
void ν¬μΈν°
νμ μ μ μ μμ§λ§ μ£Όμλ₯Ό μ μ₯νκ³ μΆμ λ μ¬μ©νλ€.
int a = 1;
void* ptr = &a;
printf("%d\\n", *voidPtr); // λͺ byteλ₯Ό μ½μ μ§ μ μ μλ€. Error!
printf("%d\\n", *(int*)voidPtr); // ν¬μΈν°λ₯Ό μ μν ν¬μΈν°λ‘ νλ³ννλ€.
πλ°°μ΄
λ°°μ΄μ μ΄λ¦μ λ§μ λλ λΊμ μ°μ°μ ν κ²½μ° ν΄λΉ κ°μ μλ£ν ν¬κΈ°λ§νΌ μ΄λν μ£Όμ κ°μ λ°ννλ€.
CμΈμ΄μ λ°°μ΄μ μμλ‘ μ μΈν΄μΌ νλ€.
int size = 5;
int arr[size]; // μλ¬!
λ°°μ΄μ κΈΈμ΄κ° λͺ μλμ§ μμ κ²½μ° μ΄κΈ° κ°μ κ°μλλ‘ μ΄κΈ°ννλ€.
int arr[] = {1, 2, 3, 4, 5};
ν¬μΈν°μ λ°°μ΄
λ°°μ΄μ μ΄λ¦μ ν΄λΉ λ°°μ΄ μ²« λ²μ§Έ μμμ μ£Όμ κ°μ κ°μ§λ€. ⇒ λ°°μ΄ λ³μλ λ°°μ΄ μ²« λ²μ§Έ μμμ μ£Όμλ₯Ό κ°λ¦¬ν€λ ν¬μΈν°κ° λλ€.
λ¨, λ°°μ΄μ μ΄λ¦μ ν¬μΈν° μμκ° λλ―λ‘ λ³κ²½ν μ μλ€.
λ°°μ΄μ μ΄λ¦μ λ§μ μ°μ°μ ν κ²½μ° ν΄λΉ μλ£νμ ν¬κΈ°λ§νΌ μ΄λν μ£Όμ κ°μ λ°ννλ€. μ μν λ°°μ΄μ κ²½μ° 1μ λνλ©΄ 4byteλ§νΌ μ΄λν μ£Όμ κ°μ΄ λλ€.
int arr[] = {1, 3, 5, 7, 9};
arr + 1 // λλ²μ§Έ μμμ μ£Όμκ°
*(arr + 1) // λλ²μ§Έ μμ
*arr + 1 // κ°μ μ°μ°μ(*)κ° λ¨Όμ μ°μ°μ λ§μΉλ―λ‘, λ°°μ΄μ 첫λ²μ§Έ μμμ 1μ λν κ°μ΄ λλ€.
λ°°μ΄μ μ΄λ¦μ΄ ν¬μΈν°κΈ° λλ¬Έμ, ν¬μΈν°λ₯Ό λ°°μ΄μ μ΄λ¦μ²λΌ μ¬μ©ν μ μλ€.
κ°μ μ°μ°μ λλ λ°°μ΄μ²λΌ μΈλ±μ€λ₯Ό λΆμ¬ κ°μ νΈμΆν μ μλ€.
int arr[] = { 1, 3, 5, 7, 9 };
printf("%d\\n", *(arr + 1)); // 3
int* pTemp = arr;
printf("%d\\n", *(pTemp + 1)); // 3
printf("%d", pTemp[1]); // 3
ν¬μΈν° λ°°μ΄
ν¬μΈν° λ³μ μ¬λ¬ κ°λ₯Ό μ¬μ©νκΈ° μν λͺ©μ μΌλ‘ μ μΈλλ λ°°μ΄. μμλ‘ ν¬μΈν° λ³μλ₯Ό κ°μ§λ€.
const char *pArr[] = {"CμΈμ΄", "μλ°", "λ² μ΄μ§"};
2μ°¨μ λ°°μ΄
ν(row)κ³Ό μ΄(column)μ κ°μ§ λ°°μ΄. λ°°μ΄μ λ°°μ΄. λ€μκ³Ό κ°μ΄ μ μΈνλ€.
int arr[i][j]; // iλ ν, jλ μ΄
<4ν 3μ΄μ κ°μ§ 2μ°¨μ λ°°μ΄>
2μ°¨μ λ°°μ΄ μ΄λ¦μ 1μ°¨μ λ°°μ΄μ²λΌ μ΄κΈ° κ°μ λ£λλΌλ, κ²°κ³Όλ 2μ°¨μ λ°°μ΄λ‘ λμ¨λ€.
int arr[2][3] = {1, 2, 3, 4, 5, 6};
== { {1, 2, 3}, {4, 5, 6} }
πλ¬Έμμ΄
λ¬Έμλ₯Ό κ°μ§ λ°°μ΄. λ°°μ΄μ λμ \\0 nullλ¬Έμκ° ν¬ν¨λλ€. μ΄λμλΆν° μ΄λκΉμ§ μ½μμ§ μ μ μμΌλ―λ‘, \\0(NULL) λ¬Έμλ₯Ό λ§λλ©΄ λ¬Έμμ΄μ λμΌλ‘ κ°μ£Όνλ€.
`char str[100] = "Hello, World!"` κ³Ό κ°μ΄ μ΄κΈ°ν νμ λ, 100κ°μ λ¬Έμκ° λ€μ΄κ° μ μλ 곡κ°μ ν λΉλ°λλ€. μ΄λ `Hello, World!` λ§ μ΄κΈ°ν λμμΌλ―λ‘ λλ¨Έμ§ λ€μ μλ κ°μ μ°λ κΈ°κ°μ κ°μ§κ² λλ€. μ΄λ μ»΄ν¨ν°κ° λ¬Έμμ΄μ λμ ꡬλΆν μ μλλ‘ `\0`(null) λ¬Έμλ₯Ό μ½μ
νλ€. μ¦ null λ¬Έμλ₯Ό λ§λλ μκ° λ¬Έμμ΄μ λμΌλ‘ νλ¨νλ€.(λ€μ λͺ¨λ κ°μ 무μνλ€.)
char charArr[] = "Hello World!";
printf("%s\\n", charArr); // Hello World!
charArr[5] = '\\0';
printf("%s\\n", charArr); // Hello
char str[100] = "Beautiful";
printf("%s", str); // Beautiful
char str2[100] = "Hello\0 World";
printf("%s", str2); // Hello
πν¨μ
ν¨μμ ν¬μΈν°
κΈ°λ³Έμ μΈ ν¨μμ μΈμ μ λ¬ ννλ 볡μ¬. (call by value: κ°μ μν νΈμΆ) μ€μΈμ(μ λ¬νλ 주체) → νμμΈμ
int main(){
int a = 10;
func(a); // aλ μ€μΈμ
return 0;
}
void func(int b){ // bλ νμμΈμ
...
}
λ°°μ΄μ μ λ¬νκΈ° μν΄μλ ν¬μΈν°λ‘ λ°λλ€.
ν¨μμ μ λ¬νκ³ μ νλ κ°μ΄ μ¬λ¬ κ°μΌ λ, λ°°μ΄μ μ λ¬ μΈμλ‘ μ¬μ©ν μ μλ€. (λ°°μ΄μ μ΄λ¦μ ν¬μΈν°. )
μ΄λ μ λ¬ λ°λ μΈμκ° ν¬μΈν° λ³μμ΄κΈ° λλ¬Έμ, μλ³Έ λ°°μ΄μ ν¬κΈ°λ₯Ό μ μ μλ€. sizeof λ₯Ό μ¬μ©ν κ²½μ° ν¬μΈν°μ μ¬μ΄μ¦μΈ 4 κ° μΆλ ₯ λλ€.
CμΈμ΄μμλ length λ₯Ό μμλ‘ κ°μ§λ ν μΈμ΄μ λ¬λ¦¬ μλ³Έ λ°°μ΄μ ν¬κΈ°λ₯Ό λ°λ‘ μ λ¬ν΄μΌ νλ€.
#include <stdio.h>
int func(int *pArr, int size) {
int sum = 0;
for (int i = 0; i < size; i++) {
sum += pArr[i];
}
return sum;
}
int main() {
int arr[] = { 1, 2, 3, 4, 5 };
int result = func(arr, sizeof(arr) / sizeof(arr[0]));
printf("%d\\n", result);
return 0;
}
ν¨μ ν¬μΈν°
ν¨μμ μ£Όμκ°μ μ μ₯νλ€.
// μλ£ν(*ν¨μ ν¬μΈν° μ΄λ¦)(μΈμ λͺ©λ‘)
int (*func)(int a);
#include <stdio.h>
int Plus(int a, int b) {
return a + b;
}
int Minus(int a, int b) {
return a - b;
}
int main() {
int (*funcPtr)(int a, int b);
funcPtr = Plus;
funcPtr = Minus;
printf("%d", funcPtr(12, 2));
return 0;
}
ν¨μμ λμ λ°μΈλ©μ μν΄ μ¬μ©ν μ μλ€. μ»΄νμΌ μμ μ κ³ μ λ ν λΉμ΄ μλλΌ λ°νμμμλ ν¨μκ° λ³κ²½λ μ μλλ‘ νλ€. νλ‘κ·Έλ¨ μ€ν μ€μ μ΄λ€ ν¨μλ₯Ό νΈμΆν μ§ κ²°μ ν μ μλ€.(λμ ν¨μ νΈμΆ)
void func(int a, int b, void (*callback)()) {
...
}
ν¨μ ν¬μΈν°λ μ°Έμ‘°νκ³ μ νλ ν¨μμ μ μΈλΆμ μμ ν μΌμΉν΄μΌ νλ€. (λ°ν μλ£νκ³Ό λ§€κ°λ³μ νμ λλ μμκ° λͺ¨λ μΌμΉν΄μΌν¨)
ν¨μ ν¬μΈν°κ° μ°Έμ‘°νκ³ μλ μ£Όμκ° μ ν¨νμ§ νμΈν΄μΌνλ€. μλͺ»λ μ£Όμλ₯Ό νΈμΆνκ±°λ `null` μ μ°Έμ‘°ν κ²½μ° νλ‘κ·Έλ¨μ΄ μ’ λ£λ μ μλ€.
πCall by Value / Call by Reference
κ°μ μν νΈμΆ(Call by value)
μ€ μΈμμ κ°μ νμ μΈμκ° λ³΅μ¬ν΄μ λ겨 λ°λλ€. μ€ μΈμκ° μ μ₯λ μ£Όμ κ°κ³Ό νμ μΈμκ° μ μ₯λ μ£Όμ κ°μ΄ μΌμΉνμ§ μλλ€.
μ°Έμ‘°μ μν νΈμΆ(Call by reference)
μ€ μΈμκ° μ°Έμ‘°νκ³ μλ μ£Όμμ κ°μ νμ μΈμκ° μ°Έμ‘°νλ€.
ν¨μ λ΄μμ λ°μ΄ν°λ₯Ό λ³κ²½νλ©΄ μλ³Έ λ°μ΄ν°λ λ³κ²½λλ€. (μμ 볡μ¬)
πμ€ν/ν λ©λͺ¨λ¦¬
μ€νλ©λͺ¨λ¦¬
LIFO(Last In First Out: νμ μ μΆ). ν¨μλ₯Ό μν 곡κ°. μ νλ ν¬κΈ°μ λΉ λ₯Έ μλ. κ° ν¨μλ μμ μ μ€ν νλ μμ κ°μ§λ©°, μ¬κΈ°μ μ§μ λ³μ, λ§€κ° λ³μ, λ¦¬ν΄ λ μ£Όμ(ν¨μλ₯Ό νΈμΆν μμΉ)κ° ν¬ν¨λλ€.
ν λ©λͺ¨λ¦¬
λμ λ©λͺ¨λ¦¬. κ°λ°μκ° μ§μ ν λΉνλ€. (malloc calloc free) μλμΌλ‘ κ΄λ¦¬ν΄μΌ ν¨. μ€νλ³΄λ€ ν¬λ€. free() λ‘ λ©λͺ¨λ¦¬κ° ν΄μ λκΈ° μ κΉμ§ μ μ§λλ€. ⇒ λ©λͺ¨λ¦¬ λμ μ£Όμ!
ν° λ°°μ΄μ΄λ κ°μ²΄λ₯Ό λμ μΌλ‘ ν λΉν λ.
(μλ°μ κ²½μ° new ν€μλλ₯Ό μ¬μ©νλ©΄ ν λ©λͺ¨λ¦¬μ μ¬λΌκ°λ€. λμ΄μ μ°Έμ‘°λμ§ μλ κ°μ²΄μ λ©λͺ¨λ¦¬λ κ°λΉμ§ 컬λ ν°μ μν΄ μλμΌλ‘ ν΄μ λλ€. static λ³μλ νμ΄ μλλΌ λ©μλ μμμ μ μ₯λλ€.)
'C, C++' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[C++] μμ(Inheritance) (0) | 2024.08.29 |
---|---|
[C++] κ°μ²΄ μ§ν₯ (6) | 2024.08.19 |
[C] λμ λ©λͺ¨λ¦¬ ν λΉ (0) | 2024.08.13 |
[C] ꡬ쑰체, 곡μ©μ²΄ (0) | 2024.08.13 |
[C++] κΈ°μ΄ (0) | 2023.08.25 |