C언어 포인터 관련문제 질문 드립니다.

조회수 638회

/* 10.2.c -- 배열을 3가지방법으로 복사하는 프로그램.*/

int main(void) {

double source[5] = {1.1,2.2,3.3,4.4,5.5};
double target1[5] = {1.0,1.0,1.0,1.0,1.0};
double target2[5] = {1.0};
double target3[5]; // 배열 선언입니다.

copy_arr(target1,source,5);
copy_ptr(target2,source,5);
copy_ptr2(target3,source,source+5);

printk(target1,5);
printk(target2,5);
printk(target3,5);
return 0;

}

void copy_arr(double * target1,double * source,int n) {

int i; // 함수정의와 지역변수  선언

for(i=0;i<n;i++){
    target1[i] = source[i]; // 배열값 복사해서 넣기
}

} void copy_ptr(double * target2,double * source,int n) {

int i;
double * a=target2;
double * b=source; // 함수정의와 지역변수 선언

for(i=0;i<n;i++)
{
    *a = *b;
    a++,b++; // 배열값 포인터로 복사해서 넣기
}

}

void copy_ptr2(double * target3,double * source,double * end) {

double * a,*b; // 함수정의와 지역변수 선언

for(a=target3,b=source;a<end;a++,b++)
{
    *a=*b; // 배열값 포인터로 복사해서 넣기
}

}

void printk(double * target,int n) {

int i;
double * s=target;
for(i=0;i<n;i++)
    printf("복사 : %.2f\n",*(s+i)); // 배열 출력하기

printf("\n");

} 1시간 동안 고민해도 도저히 몰라서 질문드립니다. copy 붙은건 배열을 복사하는 함수이고 printk는 배열을 출력하는 함수인대 copy_ptr2만 재대로 복사되서 출력되내요 뭐가문제인건가요?

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 제가 실행해봤을 때는

    copy_arr(target1, source, 5);
    copy_ptr(target2, source, 5); 
    

    위 함수들은 정상적으로 동작하는데

    copy_ptr2(target3, source, source + 5);
    

    이 함수만 복사가 제대로 되지 않았습니다.

    그 이유는 end라는 매개변수에 source + 5를 넣어주었는데, 실제 함수 내부에서 for문의 가운데 들어가는 조건식에는 source가 아니라 target3를 가리키는 a라는 포인터가 들어가서 그렇습니다..

    따라서

    for (a = target3, b = source; b < end; a++, b++)
    {
        *a = *b; // 배열값 포인터로 복사해서 넣기
    }
    

    가 되겠습니다.

    • 답변 감사합니다. 조건식에 잘못줘서 오류가 발생한거였네요. 알 수 없는 사용자 2018.11.16 10:02

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)