C프로그래밍/개인 공부

C언어 - 배열의 복사, 비교

Jminu 2022. 7. 4. 16:06

배열의 복사

1
2
3
4
5
6
7
8
9
10
11
12
13
#include<stdio.h>
 
#define SIZE 5
 
int main(void)
{
    int a[SZIE] = {12345};
    int b[SZIE];
 
    b = a; //복사 이렇게 하면 안됨.
 
    return 0;
}
cs

이렇게 하면 배열이 복사되지 않는다.

배열의 이름은 배열이 있는 '주소'이기 때문이다. 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include<stdio.h>
 
#define SIZE 5
 
int main(void)
{
    int a[SIZE] = {12345};
    int b[SIZE];
    int i;
 
    for(i=0; i<SIZE; i++){
        b[i] = a[i];
    }
 
    return 0;
}
cs

for문으로 배열b의 첫번째 인덱스부터 하나하나 대입을 해줘야한다.


배열의 비교

만약 배열a와 배열b를 비교한다고 가정해보자.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include<stdio.h>
#define SIZE 5
 
int main(void)
{
    int a[SIZE] = {123456};
    int b[SZIE] = {123456};
 
    if(a == b)
        printf("같다.");
    else
        printf("다르다");
 
    
    return 0;
}
cs

이렇게 생각하기 쉬운데 이는 틀렸다. why? 배열의 이름은 배열이 저장된 메모리의 주소이기때문에 주소를 비교하게 되는 것이다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include<stdio.h>
#define SIZE 5
 
int main(void)
{
    int a[SIZE] = {123456};
    int b[SIZE] = {123456};
    int i;
    
 
    for(i=0; i<SIZE; i++){
        if(a[i] != b[i]){
            printf("다름");
            break;
        }
    }
    
    return 0;
}
cs

배열의 복사와 마찬가지로 하나하나 비교를 해야한다.