포인터의 배열을 정렬하기 위해 포인터를 int로 취급하는 것이 좋습니다.포인터의 배열 정렬
qsort(ptrs, n, sizeof(void*), int_cmp);
나는 관계없이 포인터가 가리키는 물건의 종류, 어떤 중복이 있는지 확인하기 위해 ptrs을 정렬 할, 그래서를 qsort는 그 일의 전조이다.
내 int_cmp()
은 꽤 표준입니다.
int int_cmp(const void *a, const void *b)
{
const int *ia = (const int *)a; // casting pointer types
const int *ib = (const int *)b;
/* integer comparison: returns negative if b > a
and positive if a > b */
return *ia - *ib;
}
내 단위 테스트에서 작동하는 것 같다하지만 난 간과 할 수 이러한 시나리오에 대한 문제가 발생할 수 있습니다 int로서 PTR을 고려하는 이유 몇 가지 이유가
?
아니, 당신은'int'로 포인터를 취급 할 수 없다. 포인터의 크기는'int'의 크기와 같지 않을 수 있습니다. 또한 직접 비교하거나 산술 표현식 (예 : 구조체)에서 사용할 수없는 많은 유형의 데이터가 있음을 기억하십시오. –
좋아, 난 그냥 ptr_cmp() 함수를 작성할 필요가 ptr에 캐스팅, 나는 그것을 역 참조해야하므로 무효 ptr 수 없으므로 어쩌면 char ptr 사용할 수 있습니까? 내가 포인터를 무엇을 가리키는 지 상관없이 어떤 ptrs 배열을 정렬 할 수 있도록 일반 있습니다. – bph
포인터를 보유 할 수있는 유일한 정수 변수는'intptr_t' 및'uintptr_t'입니다. –