#include <stdio.h>
#include <stdlib.h>
int ACDSort (const void* p1, const void* p2); // 오름차순 정렬 KEY
int LenOfStr (char* str); // 배열 길이 반환 함수 선언
int main(void)
{
char* strAry[4] = {"Hardware", "Cookie", "Boy", "Power"};
int i;
puts("+++++ Before Qsort +++++");
for(i=0;i<4;i++){
printf("%d번째 문자열 ---> %s \n",i+1,strAry[i]);}
puts("");
qsort((void*)strAry,sizeof(strAry)/sizeof(char*) , sizeof(char*), ACDSort);
/* qsort 전달 인자로 포인터가 올 때는 어떻게 해야하나? */
puts("+++++ After Qsort +++++");
for(i=0;i<4;i++){
printf("%d번째 문자열 ---> %s \n",i+1,strAry[i]);}
return 0;
}
int LenOfStr (char* str)
{
int len=0, i=0;
while(str[i] != '\0'){
i++;
len++;}
return len;
}
int ACDSort (const void* p1, const void* p2)
{
char* str1 = *((char**)p1); // 질문-->왜 char** 인가?
char* str2 = *((char**)p2);
if(LenOfStr(str1) > LenOfStr(str2)) return 1;
else if(LenOfStr(str1) < LenOfStr(str2)) return -1;
else return 0;
}
일단 문제는 여기저기 참고하면서 코드를 짜긴 했습니다만, 한가지 이해가 안가는 부분이
저기 질문 표시를 해놓은 부분입니다. 왜 char** (더블포인터)를 사용하는 것인지요 ^^? |