포인터 및 함수 작동 방법에 대해 약간의 질문이 있습니다. 나는 어떻게 함수가 qsort()
처럼 보이는지 알고 싶지만, 요소를 교환하고 요소를 비교하기 위해서는 자체 함수를 사용해야한다.C/C++, 포인터 및 함수 관련 문제
//prototypes file: other.h
void Sort(char* pcFirst, int nNumber, int size, void (*Swap)(void*, void*), int (*Compare)(void*, void*)); //sorts any arrays
void SwapInt(void* p1, void* p2); // swap pointers
int CmpInt(void* p1, void* p2); // compare poineters
//realisation file: other.cpp
#include "other.h"
void Sort(char* pcFirst, int nNumber, int size,
void (*Swap)(void*, void*), int (*Compare)(void*, void*))
{
int i;
for(i = 1; i < nNumber; i++)
for(int j = nNumber - 1; j >= i; j--)
{
char* pCurrent = pcFirst + j * size;
char* pPrevious = pcFirst + (j - 1) * size;
if((*Compare)(pPrevious, pCurrent) > 0)// if > 0 then Swap
{
(*Swap)(pPrevious, pCurrent);
}
}
}
void SwapInt(void* p1, void* p2)
{
int * ptmp1 = static_cast<int*>(p1);
int * ptmp2 = static_cast<int*>(p2);
int * ptmp = ptmp1;
ptmp1 = ptmp2;
ptmp2 = ptmp;
}
int CmpInt(void* p1, void* p2)
{
int nResult;
int * ptmp1 = static_cast<int*>(p1);
int * ptmp2 = static_cast<int*>(p2);
nResult = (*ptmp1 - *ptmp2);
return nResult;
}
//main file: lab.cpp
#include <tchar.h>
#include <iostream>
#include <cstdio>
#include <cmath>
#include "other.h"
int _tmain()
{
int nAr[] = {33,44,55,22,11}; //array for sort
int nTotal = sizeof(nAr)/sizeof(int); //number of elements
for (int i = 0; i < nTotal; i++)
{
printf("%d ",nAr[i]); // result of cycle is 33 44 55 22 11
}
Sort(reinterpret_cast<char*>(&nAr[0]), nTotal, sizeof(int), SwapInt, CmpInt);
for (int i = 0; i < nTotal; i++)
{
printf("%d ",nAr[i]); // result of cycle is 33 44 55 22 11 too =(
}
}
왜 배열이 변경되지 않습니다 : 나는
이내 코드는 ... 내 함수가 데이터를 교환하지 않는 것을 알고 매우 놀랐?
디버거에서 모든 포인터가 변경되어 올바른 값을 얻을 수 있지만 main
에 배열이 변경되지 않았 음을 알 수 있습니다.
, 그들이 가리 키지 무엇 : 그래서 코드는 다음과 같이 될 수 있습니다. –