//프로그램을 문법적으로 오류가 발생되지 않도록 완성하면 다음과 같다.
#include <stdio.h>
#include <stdlib.h>
void a(int n, int *num) { //a(3, num)
int i;
for(i = 0; i < n; i++) //자판으로 입력한 나머지 값을 차례로 입력 받음
scanf("%d", &(num[i])); //num[3] = {2, 1, 4}처럼 배열이 초기화 된다.
}
void c(int *a, int *b) { //교환(포인터 a, b가 가리키는 값을 서로 교환)
int t;
t = *a; *a = *b; *b = t;
}
void b(int n, int *lt) { //b(3, num)이므로, lt[3] = {2, 1, 4}와 같다.
int a, b;
for(a = 0; a < n-1; a++) //선택정렬(오름차순)
for(b = a + 1; b < n; b++)
if(lt[a]>lt[b]) c(lt+a, lt+b); //호출 : 첫 번째 호출은 c(lt+a, lt+b) = c(2, 1)과 같다.
}
void main() {
int i, n;
int *num;
printf("How many numbers?");
scanf("%d", &n); //3 2 1 4를 입력하면, n = 3이 된다.
num = (int *)malloc(sizeof(int) * n); //배열크기는 3, int num[3];과 같음
a(n, num); //호출 : a(3, num)
b(n, num); //호출 : b(3, num)
for(i=0; i<n; i++) printf("%d ", num[i]); //정렬 결과 출력, num[3] = {1, 2, 4}
}
◈ 함수 scanf("%d", &n);에서 입력되는 원리
*scanf("%d", &n);에서 자판으로 3 2 1 4를 입력하면, n = 3이 된다.(반드시 띄어쓰기를 해야 함)
↓나머지 2 1 4는 다음에 나오는 scanf("%d", &(num[i]));에서 입력처리 된다.
*scanf("%d", &(num[i])); //num[3] = {2, 1, 4}처럼 배열이 초기화 된다.