안녕하세요 포인터 문제에 관한 질문 몇개 드립니다.
터1프한렩
안녕하세요
씨언어를 공부하는 대학생입니다.
난 정말 씨언어~ 포인터 공부하면서 나오는 문제 풀다가 이해가 안되는 문제 몇가지 질문드립니다.
1.이 문제는 홀수는 홀수대로 오름 차순 정렬,짝수는 짝수대로 오름 차순 정렬 시키는 문제 입니다.
예를 들어 3,2,1,4,6,8,7,5,3,4,5 로 저장되 있으면
정렬 후에는 1,3,3,5,5,7,2,4,4,6,8 로 출력되게 하는 것입니다.
제가 한 코딩은 아래와 같습니다. 궁금한 사항은
#include stdio.h
#pragma warning(disable:4996)
int AcdSort(int n1,int n2);
void Bubblesort(int *arr,int len,int (*Acd)(int ,int));
int main(void)
{
int arr[]={3,2,1,4,6,8,7,5,3,4,5};
int i;
Bubblesort(arr,sizeof(arr)/sizeof(int),AcdSort);
for(i=0; isizeof(arr)/sizeof(int); i++)
printf(%2d ,arr[i]);
printf(\n);
return 0;
}
int AcdSort(int n1,int n2)
{
if((n1%2)==0 && (n2%2)!=0)
return 1;
if((n1%2)!=0 && (n2%2)==0)
return 0;
if(n1n2)
return 1;
else
return 0;
} // 빨갛게 표시한 부분이 궁금한데요 조건문만 3개가 나오는데 리턴 값을 두개 이상 반환 하는 것이 가능한가 입니다.
void Bubblesort(int *arr,int len,int (*Acd)(int ,int))
{
int idx,jdx;
int temp;
for(idx=0; idxlen-1; idx++)
{
for(jdx=0; jdxlen-idx-1; jdx++)
{
if((Acd(arr[jdx],arr[jdx+1])))
{
temp=arr[jdx];
arr[jdx]=arr[jdx+1];
arr[jdx+1]=temp;
}
}
}
}
2.두 번째 질문은
퀵 소트 정렬에 관한 문제인데
int main(void)
{
char *strAry[4]={Hardware,Cookie,Boy,Power};
int i;
qsort((void *)strAry,sizeof(strAry)/sizeof(char *),sizeof(char*),AcdSort);
for(i=0; i4; i++)
printf(%s ,strAry[i]);
return 0;
}
int AcdSort(const void *p1, const void *p2)
{
char *s1=*(char **)p1;
char *s2=*(char **)p2; // 여기서 p1,p2앞에 포인터가 왜 붙는지 모르겠습니다.
고수님들의 가르침 부탁드립니다.^^
-
찬누리
2번 질문 내용은요 이미 p1 p2가 문자열의 주소값을 가지고 있는 것 같은데
포인터 변수앞에 또 포인터를 붙이는게 무슨 뜻인가 하는 겁니다.?
포인터를 붙이면 문자열의 앞글자만 넣는거 아닌가요? -
하연
1번 질문에 대해서는...
조건문이 여러개라도 반환값은 1개입니다. 그 조건에 맞는 부분에서만 반환이 되기 때문이죠.
설사 조건이 맞는 게 여러개라도, 첫번째 만나는 조건에서 반환이 되기 때문에 하나입니다.