2016-11-25 15 views
0

Deitel 's C의 7 장에서 정보 숨기기가 개별 배열 요소를 함수에 알 수 없다는 것을 보여주기 위해 저자가 사용한 버블 정렬 예제를 프로그래밍하는 방법에서는 포인터를 사용하여 주소를 전달하고 같은 방식으로 사용할 수 있습니다 .정보 숨기기 기능이 개별 배열 요소에 액세스하지 못하게하는 방법은 무엇입니까?

다음
void swap(int *element1Ptr, int *element2Ptr) { 
    int hold = *element1Ptr; 
    *element1Ptr = *element2Ptr; 
    *element2Ptr = hold; 
    } 

내가 무슨 짓을 : 여기

스왑 기능을 사용하여 포인터

void swap(int array[],int j) { 
    int hold = array[j]; 
    array[j] = array[j + 1]; 
    array[j + 1] = hold; 
} 

주() : 나는 코드 모두를 실행

int main(void) { 
    int b[] = {2,6,4,8,10,12,89,68,45,37}; 
    for (int i = 0; i < 9; i++) { 
     for (int n = 0; n < 9; n++) { 
      if (b[n] > b[n + 1]) { 
       swap(&b[n], &b[n+1]); // or swap(b,n); 
      } 
     } 
    } 

    for (int i = 0; i < 9; i++) { 
     printf("%d ", b[i]); 
    } 
    puts(""); 
    return 0; 
} 

배열을 올바르게 정렬하십시오. 그래서 저는 제 기능이 실제로 개별 요소에 대한 액세스를 얻은 것이라고 생각했습니다. 나는 어느 부분을 잘못 이해하고 있는가? 나는 건너 뛰기 전에 계속 움직이기 전에 모든 것을 이해할 필요가있다. 왜냐하면 앞으로 오는 내용을 이해하기 어렵게 만든다.

+0

왜 C++ 태그가 있습니까? 알아 차 렸니? C++이 수업에 익숙하지 않다는 것을 알고 있습니까? –

+0

또한 책에서 * 정보 숨기기 *를 어떻게 정의합니까? 이게 뭐야? –

+0

* 스왑 *의 첫 번째 버전은 매개 변수가 배열에서 온 것으로 가정하지 않기 때문에 선호됩니다. 이로 인해보다 일반적으로 적용될 수 있습니다. –

답변

0

C에서 포인터와 배열은 서로 바꿔 쓸 수 있습니다. myArray[x] 에서처럼 배열 요소에 인덱스를 사용하여 액세스하면 "myArray + (x * 배열의 요소 크기) 위치"를 의미합니다. 따라서 을 수행하여 동일한 결과를 얻을 수 있습니다.

this answer에서 배열과 포인터의 차이점에 대해 자세히 알아볼 수도 있습니다.