C Programming Language/C

C์–ธ์–ด ๋ฐฐ์—ด์— ๋Œ€ํ•ด ํ•™์Šตํ•˜๊ธฐ

567Rabbit 2024. 6. 19. 13:42

 

 

int scores[์ธ๋ฑ์Šค];

float scores[์ธ๋ฑ์Šค];

char scores[์ธ๋ฑ์Šค];

...

 

์ธ๋ฑ์Šค(index) : ๋ฐฐ์—ด ์›์†Œ์˜ ๋ฒˆํ˜ธ 0~n-1

- ๋ฐฐ์—ด ์š”์†Œ์—๋Š” ์ธ๋ฑ์Šค๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

- ์ธ๋ฑ์Šค ์•ˆ์— ์ˆ˜์‹๋„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

 

score[i] = 100;

score[i + 2] = 100;

 

 

 

- ๋ฐฐ์—ด์˜ ๊ฐ€์žฅ ํฐ ์žฅ์ ์€ ๋ฐ˜๋ณต๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ์„œ ๋ฐฐ์—ด์˜ ์›์†Œ๋ฅผ ๊ฐ„ํŽธํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด๋‹ค.

 

 

 

 

 

 

 

 

์„ธ๊ทธ๋จผํ…Œ์ด์…˜ ํฌํŠธ(segmentation fault)

 

- ์„ธ๊ทธ๋ฉ˜ํ…Œ์ด์…˜(segmentation)์€ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ๊ธฐ๋ฒ• ์ค‘ ํ•˜๋‚˜๋กœ, ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์„œ๋กœ ๋‹ค๋ฅธ ํฌ๊ธฐ์˜ ๋…ผ๋ฆฌ์  ๋‹จ์œ„์ธ ์„ธ๊ทธ๋จผํŠธ(segment)๋กœ ๋‚˜๋ˆ„์–ด ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•

- ์ด ๊ธฐ๋ฒ•์€ ์ฃผ์†Œ ๊ณต๊ฐ„์„ ๋…ผ๋ฆฌ์ ์œผ๋กœ ๋ถ„ํ• ํ•จ์œผ๋กœ์จ ๋ฉ”๋ชจ๋ฆฌ ๋ณดํ˜ธ์™€ ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ์šฉ์ดํ•˜๊ฒŒ ํ•จ

- ์„ธ๊ทธ๋ฉ˜ํ…Œ์ด์…˜ ํฌํŠธ(segmentation fault)๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ์ž˜๋ชป๋œ ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ์„ ์‹œ๋„ํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์˜ค๋ฅ˜๋ฅผ ์˜๋ฏธํ•จ

 

(์ž˜๋ชป๋œ ์ธ๋ฑ์Šค)

- ์ธ๋ฑ์Šค๊ฐ€ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋ฅผ ๋ฒ—์–ด๋‚˜๊ฒŒ ๋˜๋ฉด ํ”„๋กœ๊ทธ๋žจ์— ์น˜๋ช…์ ์ธ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค.

- ์˜ˆ๊ธฐ์น˜ ์•Š์€ ๋™์ž‘์ด๋‚˜ ํ”„๋กœ๊ทธ๋žจ์˜ ๋น„์ •์ƒ ์ข…๋ฃŒ๋ฅผ ์ดˆ๋ž˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

ex)

 

#include <stdio.h>

int main() {
    int arr[5] = {1, 2, 3, 4, 5};
    int *ptr = arr;  // ๋ฐฐ์—ด์˜ ์ฒซ ๋ฒˆ์งธ ์›์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ

    // ์œ ํšจํ•œ ์ธ๋ฑ์Šค ๋ฒ”์œ„ ๋‚ด์— ์žˆ๋Š” ์›์†Œ์— ์ ‘๊ทผ
    printf("Before out-of-bound access: arr[3] = %d\n", arr[3]);

    // ๋ฐฐ์—ด ๋ฒ”์œ„๋ฅผ ๋„˜์–ด์„œ๋Š” ๊ณณ์— ์ ‘๊ทผํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์ €์žฅ
    ptr[10] = 100;  // arr ๋ฐฐ์—ด์˜ ๋ฒ”์œ„๋ฅผ ๋„˜์–ด์„œ๋Š” ์ธ๋ฑ์Šค์— ๋ฐ์ดํ„ฐ ์ €์žฅ

    // ์œ ํšจํ•œ ์ธ๋ฑ์Šค ๋ฒ”์œ„ ๋‚ด์˜ ์›์†Œ ๊ฐ’ ํ™•์ธ
    printf("After out-of-bound access: arr[3] = %d\n", arr[3]);
    printf("Value at ptr[10] (out-of-bound access): %d\n", ptr[10]);

    return 0;
}

 

 

 

 

 

๋ฐฐ์—ด์˜ ์ดˆ๊ธฐ๊ฐ’๊ณผ ์ดˆ๊ธฐํ™”

// ์›์†Œ์˜ ์ดˆ๊ธฐ๊ฐ’์„ ์ฝค๋งˆ๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ์ค‘๊ด„ํ˜ธ ์•ˆ์— ๋‚˜์—ดํ•œ๋‹ค
int scores[5] = { 10, 20, 30, 40, 50 }
// ์ดˆ๊ธฐ๊ฐ’์„ ์ผ๋ถ€๋งŒ ์ฃผ๋ฉด ๋‚˜๋จธ์ง€ ์›์†Œ๋“ค์€ 0์œผ๋กœ ์ดˆ๊ธฐํ™”๋œ๋‹ค.
int scores[5] = { 10, 20, 30 }
// ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๊ฐ€ ์ฃผ์–ด์ง€์ง€ ์•Š์€ ๊ฒฝ์šฐ์—๋Š” ์ดˆ๊ธฐ๊ฐ’์˜ ๊ฐœ์ˆ˜๊ฐ€ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๊ฐ€ ๋œ๋‹ค
// ์ฆ‰, ์˜ค๋ฅธ์ชฝ ์ค‘๊ด„ํ˜ธ ์•ˆ์˜ ๊ฐœ์ˆ˜๋งŒํผ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋กœ ์ง€์ •๋œ๋‹ค.
int scores[] = { 10, 20, 30, 40, 50 };

 

 

์ดˆ๊ธฐํ™” ํ•˜๋Š” ๋ฐฉ๋ฒ•

int score[์ธ๋ฑ์Šค] = { 0 };

 

- ์ดˆ๊ธฐํ™” ํ•˜์ง€ ์•Š์œผ๋ฉด ์“ฐ๋ ˆ๊ธฐ๊ฐ’์ด ๋‚จ์•„์„œ ๋ฐฐ์—ด์— ์ด์ƒํ•œ ๊ฒƒ์ด ์œ„์น˜ํ•  ์ˆ˜ ์žˆ์œผ๋‹ˆ ์ดˆ๊ธฐํ™” ํ•ด์•ผ ํ•œ๋‹ค.

 

 

 

 

 

๋ฐฐ์—ด์˜ ๋น„๊ต

 

- ๋‹ค๋ฅธ ๊ณต๊ฐ„์— ํ• ๋‹น๋˜์—ˆ์œผ๋ฏ€๋กœ a์™€ b๋Š” ๊ฐ™์ง€ ์•Š๋‹ค.

#include <stdio.h>
#define SIZE 5

int main(void) {
    int i;
    int a[SIZE] = { 1, 2, 3, 4, 5 };
    int b[SIZE] = { 1, 2, 3, 4, 5 };
    
    return 0;
    
    // ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์€ ๋ฐฐ์—ด ๋น„๊ต
    if( a == b )
    	printf("์ž˜๋ชป๋œ ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค.\n");
    else
    	printf("์ž˜๋ชป๋œ ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค.\n");
        
        
    // ์˜ฌ๋ฐ”๋ฅธ ๋ฐฐ์—ด ๋น„๊ต
    for( i = 0 ; i < SIZE ; i++ )
    {
    	if( a[i] != b[i] )
        {
            printf("a[]์™€ b[]๋Š” ๊ฐ™์ง€ ์•Š์Šต๋‹ˆ๋‹ค.\n");
            return 0;
        }
    }
}

 

 

 

 

 

๋ฐฐ์—ด๊ณผ ํ•จ์ˆ˜

 

(๋ฐฐ์—ด์ด ํ•จ์ˆ˜์˜ ์ธ์ˆ˜์ธ ๊ฒฝ์šฐ)

 

- ๋ฐฐ์—ด์ด ํ•จ์ˆ˜์˜ ์ธ์ˆ˜๋กœ ์ „๋‹ฌ๋  ๋•Œ, C ์–ธ์–ด์—์„œ๋Š” ๋ฐฐ์—ด์˜ ์ฃผ์†Œ๊ฐ€ ์ „๋‹ฌ๋œ๋‹ค.

- ์ด๋Š” ํ•จ์ˆ˜์— ๋ฐฐ์—ด์„ ์ „๋‹ฌํ•  ๋•Œ ๋ฐฐ์—ด์˜ ๋ณต์‚ฌ๋ณธ์ด ์•„๋‹ˆ๋ผ ๋ฐฐ์—ด์˜ ์ฒซ ๋ฒˆ์งธ ์š”์†Œ์˜ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๊ฐ€ ์ „๋‹ฌ๋˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

- ๋”ฐ๋ผ์„œ ํ•จ์ˆ˜ ๋‚ด์—์„œ ๋ฐฐ์—ด์˜ ์›๋ณธ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋ฉด, ํ˜ธ์ถœ๋œ ๊ณณ์—์„œ๋„ ํ•ด๋‹น ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ๋ฐ˜์˜๋œ๋‹ค.

#include <stdio.h>
#define SIZE 7

void square_array(int a[], int size);
void print_array(int a[], int size);

int main(void)
{
    int list[SIZE] = { 1, 2, 3, 4, 5, 6, 7 };
    
    print_array(list, SIZE);
    square_array(list, SIZE);
    print_array(list, SIZE);
    
    return 0;
}

void square_array(int a[], int size)
{
    int i;
 	
    for(i = 0 ; i < size ; i++)
    	a[i] = a[i] * a[i];
}

void print_array(int a[], int size)
{
    int i;
 	
    for(i = 0 ; i < size ; i++)
    	printf("%3d", a[i]);
    printf("\n");
}

 



 

 

์›๋ณธ ๋ฐฐ์—ด์˜ ๋ณ€๊ฒฝ์„ ๊ธˆ์ง€ํ•˜๋Š” ๋ฐฉ๋ฒ•

void print_array(const int a[], int size) //ํ•จ์ˆ˜ ์•ˆ์—์„œ a[]๋Š” ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค
{
	...
    a[0] = 100; //์ปดํŒŒ์ผ ์˜ค๋ฅ˜๊ฐ€ ๋‚œ๋‹ค. 
}