프로그래밍

 3198, 1/160 회원가입  로그인  
   o엔요o
   http://www.cyworld.com/rlwls212
   질문이요~!

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=2848 [복사]


#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** (더블포인터)를 사용하는 것인지요 ^^?

  Hit : 4528     Date : 2011/01/09 06:10