๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๊ฐœ๋ฐœ/CS50 ์ฝ”์นญ์Šคํ„ฐ๋””

[CS50 ์ฝ”์นญ์Šคํ„ฐ๋””] 5์ฃผ์ฐจ_๋ฉ”๋ชจ๋ฆฌ

by - ์˜คํŠธ - 2021. 3. 1.

[5์ฃผ์ฐจ ๊ฐœ๋…]

โœ”๏ธ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ - 16์ง„๋ฒ•, ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ

16์ง„๋ฒ• : 2๊ฐœ์˜ 16์ง„์ˆ˜๋Š” 1byte์˜ 2์ง„์ˆ˜๋กœ ๋ณ€ํ™˜๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ •๋ณด๋ฅผ ํ‘œํ˜„ํ•˜๊ธฐ ๋งค์šฐ ์œ ์šฉ, 2์ง„์ˆ˜๋ณด๋‹ค ๊ฐ„ํŽธํ•˜๋ฉด์„œ ์ปดํ“จํ„ฐ๋Š” 10์ง„์ˆ˜๋ฅผ ์ดํ•ดํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— 16์ง„์ˆ˜๊ฐ€ ์œ ์šฉ

๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ : int ํƒ€์ž…์€ ์ปดํ“จํ„ฐ์˜ ๋ฉ”๋ชจ๋ฆฌ ์–ด๋”˜๊ฐ€์— 4๋ฐ”์ดํŠธ ๋งŒํผ์˜ ์ž๋ฆฌ๋ฅผ ์ฐจ์ง€

-> C์—์„œ๋Š” ๋ณ€์ˆ˜์˜ ๋ฉ”๋ชจ๋ฆฌ์ƒ ์ฃผ์†Œ๋ฅผ ๋ฐ›๊ธฐ ์œ„ํ•ด ‘&’์ด๋ผ๋Š” ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉ (printf("%p\n", &n);)

-> ‘*’๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ทธ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ์— ์žˆ๋Š” ์‹ค์ œ ๊ฐ’์„ ์–ป์„ ์ˆ˜ ์žˆ์Œ (printf("%i\n", *&n);)

 

โœ”๏ธ ํฌ์ธํ„ฐ

ํฌ์ธํ„ฐ ๋ณ€์ˆ˜ : *p๋ผ๋Š” ํฌ์ธํ„ฐ ๋ณ€์ˆ˜์— ์ฆ‰ ๋ณ€์ˆ˜ n์˜ ์ฃผ์†Œ(&n)๋ฅผ ์ €์žฅ (int n = 50; int *p = &n;)

-> p๊ฐ€ n์„ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์œผ๋กœ ํ•ด์„ ๊ฐ€๋Šฅ

 

โœ”๏ธ ๋ฌธ์ž์—ด - ํฌ์ธํ„ฐ, ๋ฌธ์ž์—ด

string ์ž๋ฃŒํ˜•์„ ์ด์šฉํ•˜์—ฌ ๋ฌธ์ž์—ด ์ถœ๋ ฅ

char ํฌ์ธํ„ฐ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฌธ์ž์—ด ์ถœ๋ ฅ

 

โœ”๏ธ ๋ฌธ์ž์—ด ๋น„๊ต 

&s[0], &s[1], &s[2], &s[3] : s๋ผ๋Š” ๋ฌธ์ž์—ด์˜ ์ฒซ ๋ฒˆ์งธ ~ ๋„ค ๋ฒˆ์งธ  ๋ฌธ์ž์— ํ•ด๋‹นํ•˜๋Š” ์ฃผ์†Œ๊ฐ’

*s, *(s+1), *(s+2), *(s+3) : ๋ฌธ์ž์˜ ๊ฐ’์„ ์ฒซ ๋ฒˆ์งธ ~ ๋„ค ๋ฒˆ์งธ ์ˆœ์„œ๋Œ€๋กœ ์ถœ๋ ฅ

 

โœ”๏ธ ๋ฌธ์ž์—ด ๋ณต์‚ฌ - malloc

string s ๋Š” char *s ์™€ ๋™์ผํ•œ ์˜๋ฏธ

๋‘ ๋ฌธ์ž์—ด์„ ์‹ค์ œ๋กœ ๋ฉ”๋ชจ๋ฆฌ์ƒ์—์„œ ๋ณต์‚ฌ -> ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ํ•จ์ˆ˜ ์‚ฌ์šฉ -> char *t = malloc(strlen(s) + 1);

: s ๋ฌธ์ž์—ด์˜ ๊ธธ์ด์— ๋„ ์ข…๋‹จ ๋ฌธ์ž์— ํ•ด๋‹นํ•˜๋Š” 1์„ ๋”ํ•œ ๋งŒํผ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น

 

โœ”๏ธ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น๊ณผ ํ•ด์ œ - free, valgrind

malloc ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•œ ํ›„  free ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•ด์ œ -> ํ•ด์ œํ•˜์ง€ ์•Š์œผ๋ฉด ์“ฐ๋ ˆ๊ธฐ ๊ฐ’ ๋ฐœ์ƒ -> ๋ฉ”๋ชจ๋ฆฌ 

์šฉ๋Ÿ‰ ๋‚ญ๋น„ -> '๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜'

valgrind : ๋ฒ„ํผ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ์™€ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ๋‘ ๊ฐ€์ง€ ์—๋Ÿฌ ํ™•์ธ

 

โœ”๏ธ ๋ฉ”๋ชจ๋ฆฌ ๊ตํ™˜, ์Šคํƒ, ํž™ - ์Šคํƒ, ํž™, ํฌ์ธํ„ฐ

๋จธ์‹  ์ฝ”๋“œ ์˜์—ญ : ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋  ๋•Œ ๊ทธ ํ”„๋กœ๊ทธ๋žจ์ด ์ปดํŒŒ์ผ๋œ ๋ฐ”์ด๋„ˆ๋ฆฌ๊ฐ€ ์ €์žฅ

๊ธ€๋กœ๋ฒŒ ์˜์—ญ : ํ”„๋กœ๊ทธ๋žจ ์•ˆ์—์„œ ์ €์žฅ๋œ ์ „์—ญ ๋ณ€์ˆ˜๊ฐ€ ์ €์žฅ

ํž™ ์˜์—ญ : malloc์œผ๋กœ ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ

์Šคํƒ ์˜์—ญ :  ํ”„๋กœ๊ทธ๋žจ ๋‚ด์˜ ํ•จ์ˆ˜์™€ ๊ด€๋ จ๋œ ๊ฒƒ๋“ค์ด ์ €์žฅ

a์™€ b๋ฅผ ๋ฐ”๊พธ๋Š” ๊ฒƒ์€ x์™€ y๋ฅผ ๋ฐ”๊พธ๋Š” ๊ฒƒ์— ์•„๋ฌด๋Ÿฐ ์˜ํ–ฅ๋„ ๋ฏธ์น˜์ง€ ์•Š์Œ -> a์™€ b๋ฅผ ๊ฐ๊ฐ x์™€ y๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ๋กœ ์ง€์ •ํ•จ์œผ๋กœ์จ ๋ฌธ์ œ ํ•ด๊ฒฐ

 

โœ”๏ธ ํŒŒ์ผ ์“ฐ๊ธฐ - scanf, fopen, fprintf, fclose

fopen : FILE์ด๋ผ๋Š” ์ž๋ฃŒํ˜•์œผ๋กœ ๋ถˆ๋Ÿฌ์˜ด

(fopen ํ•จ์ˆ˜์˜ ์ฒซ๋ฒˆ์งธ ์ธ์ž๋Š” ํŒŒ์ผ์˜ ์ด๋ฆ„, ๋‘๋ฒˆ์งธ ์ธ์ž๋Š” ๋ชจ๋“œ๋กœ r์€ ์ฝ๊ธฐ, w๋Š” ์“ฐ๊ธฐ, a๋Š” ๋ง๋ถ™์ด๊ธฐ)

fclose : ์ž‘์—…์ด ๋๋‚œ ํ›„์—๋Š” ํŒŒ์ผ์— ๋Œ€ํ•œ ์ž‘์—…์„ ์ข…๋ฃŒ

 

โœ”๏ธ ํŒŒ์ผ ์ฝ๊ธฐ - JPEG, fread

 

 

[5์ฃผ์ฐจ ํŒ€๋ณ„๋ฏธ์…˜]

#include <stdio.h>

int main()
{
    int arr[6][5] =  {{1, 2, 3, 4, 5}, {6, 7, 8, 9, 10}, {11, 12, 13, 14, 15}, {16, 17, 18, 19, 20}, {21, 22, 23, 24, 25}, {26, 27, 28, 29, 30}}; // ๋ฐฐ์—ด ์„ ์–ธ
    int *p = (int *)arr; // ํฌ์ธํ„ฐ ๋ณ€์ˆ˜ p์— arr ๋ฐฐ์—ด์˜ ์‹œ์ž‘ ์ฃผ์†Œ ๋Œ€์ž…

    for(int i=5; i>=0; i--) { // ์ด์ค‘ For๋ฌธ ์‚ฌ์šฉ์œผ๋กœ ๋ฐฐ์—ด ์ถœ๋ ฅ
        for(int j=0; j<5; j++){
            printf("%d ", *(p + i*5) + j); // ์ด์ค‘ ํฌ์ธํ„ฐ๋กœ ์ ‘๊ทผ
        }
        printf("\n");
    }
}