컴퓨터(Computer Science)/자료구조(Data Structure)

배열, 함수의 매개변수,주소,값,자료구조(2)

게임이 더 좋아 2019. 9. 22. 16:50
반응형
728x170

자료구조의 많은 구조 중 배열에 대해서 알아보도록 하겠습니다.

(c언어를 조금이라도 알고있다고 가정해서 설명하고 있습니다.)

 

(데브씨,devc++로 소스파일을 작성하고 컴파일하고 런 했습니다. ㅎㅎ)

 

우선 배열의 기초를 알아봅시다.

배열을 써먹으려면 배열은 선언하는 법부터 알아야겠죠?

 

 

배열은 "자료형 배열이름[ 배열크기];" 이렇게 선언합니다. 

 

 

다시말하자면 배열을 선언하는데에는

 

배열에 들어갈 값의 자료형

배열의 이름

배열의 크기

 

이 3가지가 필요하다는 겁니다.

 

 

예를 들어 int a[5];라고 선언하면

5칸짜리 배열이 만들어지고 

배열의 첫번째 칸의 이름은 0

두번째 칸의 이름은1 

...

다섯번째 칸의 이름은4 가 됩니다.

 

즉 a[1]이라하면 이름이0 인 칸을 말하는 것입니다.

(주소를 뜻하는 것이죠ㅎㅎ)

 

 

 

그럼 배열을 왜 만드느냐????

 

더욱 본질적으로 말하자면 자료구조를 왜 잘만들어놔야하냐??

 

앞에서 말했다시피 자료구조가 난장판이면 그 자료를 이용하는데에

메모리 낭비, 시간 낭비를 해서 그렇습니다.

 

아하 그럼 배열을 쓰는 이유는 자료에 더욱 쉽게 접근하기 위해서구나

 

뭐 자료마다 다르겠지만 그렇다고 볼 수 있습니다.

 

 

그렇다면 자료를 이용하려면 함수가 있어야 하는데

어떤식으로 작동하는지 알아야겠죠??

 

일종의 함수를 만들어보겠습니다.

 

 

void copy_array(int a[],int b[], int len) // 얘는 3가지가 필요하구나?
{
int i;
for (i=0; i<len; i++)   // 0부터 배열의 크기보다 작아질 때까지 for문이 반복되겠구나. 
b[i]= a[i];   // a의 배열이 b로 복사되는 구나>>>a가 b한테 값을 주는구나??
}

 

 

copy_array라는 함수를 만들었습니다. 바로 배열을 복사하는 함수입니다.

 

하나 더 함수를 만들어보겠습니다.

 

void copy_variable(int a, int b)
{
b=a;

}

 

얘는 배열이 아닌 변수를 복사하는 함수입니다. 

 

함수를 2개를 만들었으니깐 써봐야겠죠??

 

 

 

void main(){
int A[5]={10,20,30};
int B[5],i,x=2018,y=0;

copy_variable(x,y);
copy_array(A,B,5);

printf("변수 복사 결과: x=%d, y=%d\n",x,y);
printf("배열 복사 결과: \n");

for (i=0; i<5; i++){

printf ("A[%d]= %d\t",i,A[i]);
printf ("B[%d]= %d\n",i,B[i]);
}

}

 

어떤 결과가 나올까요??

 

 

 

 

??? 변수는 분명 복사를 했는데??? 왜 그대로지???

배열은 복사가 잘됐는데 변수만 그러네???

 

여기서 큰 차이가 나옵니다.

 

흔히 말하기를 주소를 참조했느냐 아니면 값을 그냥 복사해서 끌어온거냐

이렇게 말하곤 하는데

 

call by value니 뭐니 이런 것 말고 쉽게 설명하겠습니다.

 

 

 

a와 b가 게임을 하다가 싸워가지고  현피를 뜨러옵니다.

 

a가 이겨서 b의 버릇을 고쳐줬습니다.

 

그런데 b가 집에 갔더니 또 나댑니다.

 

그래서 이번엔 b의 집주소를 알아내서 가서 조졌습니다.

 

그랬더니 b의 버릇이 고쳐졌습니다. ㅎㅎㅎ

 

 

먼 개소리냐구여???

a의 값을 b에게 주는 것을 표현한 것인데

 

"버릇" = 값

"주소 "= 포인터


그니까 b를 집에서 불러내서 버릇을 고쳐주느냐?(값만 불러옴)

b의 집에 찾아가서 버릇을 고쳐주느냐?(주소 참조) 의 차이입니다.

 

즉 다시 말해서

a[1] 은 a[1]안에 들어있는 값을 말하기도 하지만 

실제로 문장에서 쓰인다면 주소를 찾아가서 값을 보여주는 것이라고 보면 되겠습니다.

 

오늘은 이만 ㅂㅂ

 

 

 

728x90
반응형
그리드형