난 그냥 C 프로그래밍 언어를 사용하여 포인터에 대해 배울 시작, 그리고 난 그들이 내가 사용 책에있는이 특정 코드 예제 위로 교차하고있다 :이 포인터 예제는 어떻게 오류를 생성하지 않습니까?
#include <stdio.h>
#define SIZE 10
void bubbleSort(int * const array, const size_t size); // prototype
int main(void)
{
// initialize array a
int a[ SIZE ] = { 2, 6, 4, 8, 10, 12, 89, 68, 45, 37 };
size_t i; // counter
puts("Data items in original order");
// loop through array a
for (i = 0; i < SIZE; ++i)
{
printf("%4d", a[ i ]);
} // end for
bubbleSort(a, SIZE); // sort the array
puts("\nData items in ascending order");
// loop through array a
for (i = 0; i < SIZE; ++i)
{
printf("%4d", a[ i ]);
} // end for
puts("");
return 0;
}
// sort an array of integers using bubble sort algorithm
void bubbleSort(int * const array, const size_t size)
{
void swap(int *element1Ptr, int *element2Ptr); // prototype
unsigned int pass; // pass counter
size_t j; // comparison counter
// loop to control passes
for (pass = 0; pass < size - 1; ++pass)
{
// loop to control comparisons during each pass
for (j = 0; j < size - 1; ++j)
{
// swap adjacent elements if they’re out of order
if (array[ j ] > array[ j + 1 ])
{
swap(&array[ j ], &array[ j + 1 ]);
} // end if
} // end inner for
} // end outer for
} // end function bubbleSort
// swap values at memory locations to which element1Ptr and
// element2Ptr point
void swap(int *element1Ptr, int *element2Ptr)
{
int hold = *element1Ptr;
*element1Ptr = *element2Ptr;
*element2Ptr = hold;
} // end function swap
은 내가 이해하고 있지 않다 것은 왜 이 오류를 포기하지 않기 때문에 bubbleSort 함수의 매개 변수에서 const
이 배열 앞에 있고 배열을 변경하면 const
을 가리킬 수 있으므로 변경할 수 없습니다. 그러나이 함수에서 배열의 요소를 바꿔서 배열을 변경하면 오류가 발생하지 않아야합니다. 나는이 상황에서 어떻게 포인터가 작동 하는지를 정확하게 이해하지 못하고 있다고 가정하고있다.
'const array'는'array'가 가리키는 대상이 아니라'const'임을 의미합니다. 'array'는 포인터의 빈약 한 이름입니다. 나는 그것을 바꿀 것을 제안합니다! –
@ M.M 죄송합니다. 책의 예에서 보여준 내용을 정확히 입력하기 만했습니다. – dj2k