2017-05-08 8 views
0

엄격하게 포인터 연산을 사용하여 한 배열의 값을 다른 배열로 복사하려고합니다. 이것은 내가 지금 가지고있는 코드 :포인터 계산을 사용하여 C 배열의 값을 다른 배열로 복사하는 방법

int *p; 
    int arraySize = 20; 

    int array[arraySize];  

    for (p = array; p< array+(sizeof(array)/sizeof(int)); p++){ 
     int random = rand() % 200; 
     *p = random; 
    } 

    for (p = array; p< array+(sizeof(array)/sizeof(int)); p++){ 
     printf("%d\t%x\n", *p, p); 
    } 

    //the code above works fine 

    printf("\n"); 

    //grow the new array by one to insert value at end later 
    int array2[(arraySize+1)]; 

    int *p2; 

    for(p2 = array2; p2< array2+(sizeof(array2)/sizeof(int)); p2++){ 
     *(p2) = *(p); 
    } 

    for(p2 = array2; p2< array2+(sizeof(array2)/sizeof(int)); p2++){ 
     printf("%d\t%x\n", *p2, p2); 
    } 

하지만 난 코드를 실행할 때 출력되는 모든 메모리 위치 각각에 0입니다. 내가 뭘 잘못하고 값을 복사하는 것을 막는거야?

+1

'p'가 증가하지 않습니다. –

+0

코드의 문제점은'p2'를 변경하지만'p'를 변경하지 않는다는 것입니다. 오타로 닫는 투표. – dasblinkenlight

+0

p ++를 수행하면 임의의 숫자와 혼합 된 임의의 숫자가 메모리 위치에 출력됩니다. – theplaid

답변

1

귀하의 문제는 당신이 *p에서 *p2에 복사하는이 루프에 있습니다

for(p2 = array2; p2< array2+(sizeof(array2)/sizeof(int)); p2++){ 
    *(p2) = *(p); 
} 

당신은 p2를 증가하지만 p를 증가 결코 당신은 다시 array의 시작 부분을 가리 키도록 p를 재설정하지 않습니다. 이 루프가 시작될 때 parray의 끝 부분을 가리키고 있습니다. 루프를 다음으로 변경하십시오.

for(p2 = array2, p = array; p2 < array2 + (sizeof(array2)/sizeof(int)) - 1; p2++, ++p){ 
    *(p2) = *(p); 
}