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)

 

c, h
๋‹ซ๊ธฐ
#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; }

 

 

 

 

 

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

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

 

 

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

c, h
๋‹ซ๊ธฐ
int score[์ธ๋ฑ์Šค] = { 0 };

 

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

 

 

 

 

 

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

 

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

c, h
๋‹ซ๊ธฐ
#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 ์–ธ์–ด์—์„œ๋Š” ๋ฐฐ์—ด์˜ ์ฃผ์†Œ๊ฐ€ ์ „๋‹ฌ๋œ๋‹ค.

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

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

c, h
๋‹ซ๊ธฐ
#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"); }

 



 

 

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

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