:: 게시판
:: 이전 게시판
|
이전 질문 게시판은 새 글 쓰기를 막았습니다. [질문 게시판]을 이용바랍니다.
통합규정 1.3 이용안내 인용"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
08/07/07 22:18
정수까지 포인터로 연결할려면 고쳐야 할 부분이 좀 있습니다.
식도 복잡해 지고요. #include <stdio.h> #include <conio.h> void bubblesort(int *number, int m); void main() int a=8, b=7, c=33, d=-20, e=100, f=34, g=9, h=12, i=83, j=10; int number[10], l, m=10; number[0]=a; number[1]=b; number[2]=c; number[3]=d; number[4]=e; number[5]=f; number[6]=g; number[7]=h; number[8]=i; number[9]=j; bubblesort(number, m); for(l=0;l<10;l++) { printf("정렬된 결과 number[%d] = %d\n", l, number[l]); } void bubblesort(int *number, int m) int k; int temp; for(m=m-1; m>=0; m--) { for(k=0;k<m;k++) { if(number[k]>number[k+1]) { temp=number[k]; number[k]=number[k+1]; number[k+1]=temp; } } } 일단 포인터를 배제하고 배열만으로 정렬해봤습니다. 아마 메모리 안의 내용까지 바꿔서 a에는 -20 b에는 7 c에는 8 이런식으로 바꿀 목적인가 본데... 효율은 좀 떨어지겠군요. 원하시는 대로 만들려면 시간이 조금 더 걸릴것 같습니다.
08/07/07 22:20
일단 원하시는대로 포인터들의 배열을 쓰실려면 버블 함수내의 temp역시 주소를 저장할 메모리 공간으로 잡아야 할 것입니다. temp를 정수로 선언하지 말고 포인터 변수로 선언해서 메모리 주소끼리 바꿔줘야 할 것입니다.
08/07/07 22:34
EZrock님// 감사합니다..
그런데 문제가 포인터를 사용해서 해야 하는거라 .. 아 시언어 무지 어렵군요.. 저는 도저히 이해가..
08/07/07 23:00
C는 처음 배우기 이래서 그닥 좋은 언어가 아닌 듯 해요. 프로그래밍에서 사람이 되도록 미뤄두고 몰라야 할 디테일을 너무 일찍 깨닫게 강제하는 것 같아요. 일단은.. 포인터 그 자체는 별로 프로그래밍 행위 자체의 일부는 아니에요. 다만 C가 하드웨어 오리엔티드 된 부분이 많기 때문에 들어있는 것이고, 하드웨어에 관련된 기초 강좌들을 충실히 공부하시면 아시게 될 날이 올 거에요.
문제를 조금 알려드리면, 지금 *number 하게 되면 안 됩니다. number[0] 에는 a의 주소가 들어 있죠. number는 number[0]의 포인터 타입입니다. 따라서 int** 타입이죠. 그런데 *를 한 번 먹이게 되면, number[0]에 있는 값, 즉 a의 주소가 됩니다. 그게 패러미터로 들어갔어요. 그 상태에서 number[1]을 bubblesort() 안에서 사용하게 되면, 컴파일러는 number, 즉 a의 주소로부터 1만큼, 즉 1 곱하기 int size 만큼 떨어진 곳에서 4 바이트를 읽어 그걸 정수 취급하게 되는데, 이러면 흔히 쓰레기 값이 들어가게 되죠. (정확히는 스택은 아래로 자라고 배열은 위로 참조하기 때문에 main을 부른 스택 프레임의 내용들이 좌르륵 나오게 되겠지요) 패러미터를 int** 타입을 사용하세요.
08/07/08 03:29
포인터를 이용한 버전으로 바꾸어 봤습니다.
아래의 bubblesort 함수의 'int *number[]'는 아이온님 말씀대로 'int **number'로 바꾸어도 동일합니다. 단지 이쪽이 좀 더 number의 의미가 명확할거 같아서 이렇게 바꿔봤습니다. ^^ #include <stdio.h> void bubblesort(int *number[], int m); int main() int a=8, b=7, c=33, d=-20, e=100, f=34, g=9, h=12, i=83, j=10; int *number[10]; int m=10; int l; number[0]=&a; number[1]=&b; number[2]=&c; number[3]=&d; number[4]=&e; number[5]=&f; number[6]=&g; number[7]=&h; number[8]=&i; number[9]=&j; bubblesort(number, m); for(l=0;l<10;l++) { printf(" number[%d] = %d\n", l, *(number[l])); return 0; } void bubblesort(int *number[], int m) int k; int *temp; for(m=m-1; m>=0; m-=1) { for(k=0;k<m;k++) { if( *(number[k]) > *(number[k+1]) ) { temp = number[k]; number[k] = number[k+1]; number[k+1] = temp; } } }
|