이전 포스팅에서는 c언어에서 함수 포인터와 구조체를 응용하여 객체의 메소드를 호출하듯한 스타일의 코딩하는 방법에 대해 알아보았습니다. oop에서는 클래스를 선언하고 클래스 내부에 이너 메소드를 구현합니다. 이는 해당 객체가 사용할 수 있는 메소드를 의미합니다. c언어는 절차지향언어로서 객체라는 개념이 없습니다. 다만, 구조체 자료구조의 포인터를 생성하면 동적 할당된 메모리 공간에 일련의 공간을 할당합니다. 이를 객체처럼 사용할 수 있으며 구조체 멤버 필드로 함수 포인터 변수를 할당하면 마치 oop의 객체가 가진 메소드를 호출하듯이 활용할 수 있습니다. 만약 c언어에서 함수 포인터와 구조체를 응용하는 예제가 궁금하시다면 아래링크를 참고하여 학습해주세요.
2021.12.20 - [C/응용] - C/C++ 함수 포인터 변수 활용 예제 - 3(구조체 메모리 동적 할당)
다음으로 이전 포스팅에서는 c언어에서 strcat 문자열 함수를 사용하여 두 버퍼가 가리키는 문자열을 새로운 버퍼에 이어 붙이는 예제를 알아보았습니다. 두 문자열을 합칠 때 strcat을 사용합니다. 자바와 같은 객체지향언어에서는 += 등과 같은 연산자를 사용하여 두 문자열을 이어 붙일 수 있지만 c언어에서는 두 문자열을 이어 붙이는데 포인터를 활용해야합니다. 만약 c언어의 strcat 활용 예제가 궁금하시다면 아래 링크의 포스팅을 참고하여 학습해주세요.
2023.07.15 - [C/응용] - [C언어/C++] C언어 strcat 문자열 합치기
마지막으로 이전 포스팅에서는 c언어에서 리눅스의 pthread를 생성하는 예제에 대해 알아보았습니다. 스레드란 프로세스 내에서 독립적으로 코드를 수행할 수 있는 논리적 처리 단위를 의미합니다. 즉, 병렬 처리가 가능하게 도와줍니다. 이러한 pthread는 부모 프로세스와 연결되어 커널에서 부모 프로세스가 종료될 때 자식 스레드들도 모두 강제종료합니다. 이러한 구조를 join 방식이라합니다. 만약 pthread를 detached 스레드로 구성하면 부모 프로세스가 종료되더라도 자식 스레드가 강제 종료되지않습니다. 하지만 좀비 스레드가 될 가능성이 있기때문에 조심해야합니다. 리눅스에서 detached 스레드 구성 방법이 궁금하시다면 아래 링크를 참고해주세요.
2023.07.16 - [C/응용] - [C언어/C++] C언어 pthread 및 detached thread 만들기
아래는 c언어에서 Sequential 순차 정렬 알고리즘을 작성하여 숫자들을 정렬하여 결과를 화면에 출력하는 예제입니다. 정보처리기사, 정보보안기사에서 자주 출제되는 삽입정렬, 선택정렬, 버블정렬에 이은 정렬 알고리즘입니다.
#include <stdio.h>
void sequentialSort(int arr[], int n) {
int i, j, temp;
// Sequential 순차 정렬 알고리즘
for (i = 0; i < n-1; i++) {
for (j = i+1; j < n; j++) {
if (arr[i] > arr[j]) {
// Swap
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}
int main() {
int arr[] = {5, 2, 9, 1, 5}; // 정해진 정수 배열
int n = sizeof(arr) / sizeof(arr[0]);
// Sequential 순차 정렬 호출
sequentialSort(arr, n);
// 정렬된 배열 출력
printf("Sorted array:\n");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
return 0;
}
아래는 c언어에서 사용자에게 정수들의 집합을 입력받아 해당 정수들을 Sequential 순차 정렬 후 화면에 출력하는 예제입니다.
#include <stdio.h>
void sequentialSort(int arr[], int n) {
int i, j, temp;
// Sequential 순차 정렬 알고리즘
for (i = 0; i < n-1; i++) {
for (j = i+1; j < n; j++) {
if (arr[i] > arr[j]) {
// Swap
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}
int main() {
int i, n;
printf("Enter the number of elements: ");
scanf("%d", &n);
int arr[n];
printf("Enter %d integers:\n", n);
for (i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
// Sequential 순차 정렬 호출
sequentialSort(arr, n);
// 정렬된 배열 출력
printf("Sorted array:\n");
for (i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
return 0;
}