본문 바로가기
Computer Science/C 언어

[C언어 20] Declarations 선언문

by rnasterofmysea 2024. 12. 28.
반응형

Declarations  선언문

C 언어의 선언문은 변수, 함수, 포인터, 배열 등의 사용을 정의하는 중요한 요소입니다. 올바른 선언문 작성은 프로그램의 가독성과 안정성을 높입니다. 이 챕터에서는 선언문의 구조와 다양한 유형의 선언을 심도 있게 다룹니다.

 

기존에 자주 사용하던 선언 형식부터 다소 생소한(?) 선언문까지 짚고 가볼까합니다. 다음 포스트에는 C언어로 객체지향을 흉내내는 방법에 대해 게시하겠습니다.


1. Basics of Declarations / 선언문의 기본

  • 구조: 선언문은 데이터 타입과 변수 이름으로 구성됩니다.
    • 형식: <데이터 타입> <변수 이름>
    • 예: int number;

예제: 기본 변수 선언

#include <stdio.h>

int main() {
    int number = 10; // 정수형 변수 선언
    float pi = 3.14; // 실수형 변수 선언
    char letter = 'A'; // 문자형 변수 선언

    printf("number: %d, pi: %.2f, letter: %c\n", number, pi, letter);
    return 0;
}

2. Initializations / 초기화

  • 개념: 변수 선언과 동시에 값을 할당.
  • 형식: <데이터 타입> <변수 이름> = <초기값>

예제: 초기화된 변수 선언

#include <stdio.h>

int main() {
    int a = 5; // 초기화
    int b = 10, c = 15; // 여러 변수 초기화

    printf("a: %d, b: %d, c: %d\n", a, b, c);
    return 0;
}

3. Pointers in Declarations / 포인터 선언

  • 구조: * 기호를 사용하여 포인터 선언.
  • 형식: <데이터 타입> *<포인터 이름>

예제: 포인터 선언 및 초기화

#include <stdio.h>

int main() {
    int value = 42;
    int *ptr = &value; // 포인터 선언 및 초기화

    printf("value: %d, *ptr: %d\n", value, *ptr);
    return 0;
}

4. Arrays in Declarations / 배열 선언

  • 구조: []를 사용하여 배열 선언.
  • 형식: <데이터 타입> <배열 이름>[<크기>]

예제: 배열 선언 및 초기화

#include <stdio.h>

int main() {
    int numbers[5] = {1, 2, 3, 4, 5}; // 배열 초기화

    for (int i = 0; i < 5; i++) {
        printf("numbers[%d]: %d\n", i, numbers[i]);
    }
    return 0;
}

5. Functions in Declarations / 함수 선언

  • 구조: 반환 타입, 함수 이름, 매개변수 목록으로 구성.
  • 형식: <반환 타입> <함수 이름>(<매개변수>)

예제: 함수 선언 및 정의

#include <stdio.h>

int add(int a, int b); // 함수 선언

int main() {
    int result = add(5, 3);
    printf("5 + 3 = %d\n", result);
    return 0;
}

int add(int a, int b) { // 함수 정의
    return a + b;
}

6. Complex Declarations / 복잡한 선언문

  • 포인터와 배열의 조합:
    • 배열 포인터: <데이터 타입> (*<포인터 이름>)[<크기>]
    • 포인터 배열: <데이터 타입> *<배열 이름>[<크기>]

예제: 배열 포인터와 포인터 배열

#include <stdio.h>

int main() {
    int matrix[2][3] = {{1, 2, 3}, {4, 5, 6}};
    int (*ptr)[3] = matrix; // 배열 포인터

    printf("matrix[0][1]: %d\n", ptr[0][1]);

    int *arr[3]; // 포인터 배열
    int a = 10, b = 20, c = 30;
    arr[0] = &a;
    arr[1] = &b;
    arr[2] = &c;

    printf("arr[1]: %d\n", *arr[1]);
    return 0;
}

7. Functions Returning Pointers and Arrays / 포인터 및 배열을 반환하는 함수

  • 포인터를 반환하는 함수: 동적으로 생성된 데이터를 반환할 때 사용.

예제: 포인터를 반환하는 함수

#include <stdio.h>
#include <stdlib.h>

int* createArray(int size) {
    int* arr = malloc(size * sizeof(int));
    for (int i = 0; i < size; i++) {
        arr[i] = i + 1;
    }
    return arr;
}

int main() {
    int* array = createArray(5);

    for (int i = 0; i < 5; i++) {
        printf("%d ", array[i]);
    }
    printf("\n");

    free(array);
    return 0;
}

8. Macros and Declarations / 매크로와 선언문

  • 매크로를 사용하여 반복적인 선언문을 단순화할 수 있습니다.

예제: 매크로로 배열 선언

#include <stdio.h>
#define ARRAY_SIZE 5
#define CREATE_ARRAY(type, name) type name[ARRAY_SIZE]

int main() {
    CREATE_ARRAY(int, numbers); // 매크로로 배열 선언

    for (int i = 0; i < ARRAY_SIZE; i++) {
        numbers[i] = i * 2;
        printf("numbers[%d]: %d\n", i, numbers[i]);
    }
    return 0;
}

9. Struct and Union Declarations / 구조체와 공용체 선언

  • 구조체 선언: 관련된 데이터를 그룹화하여 선언.
  • 공용체 선언: 동일한 메모리 공간을 공유하는 데이터를 선언.

예제: 구조체와 공용체

#include <stdio.h>

struct Point {
    int x, y;
};

union Data {
    int i;
    float f;
};

int main() {
    struct Point p = {10, 20};
    printf("Point: (%d, %d)\n", p.x, p.y);

    union Data d;
    d.i = 42;
    printf("Data as int: %d\n", d.i);
    d.f = 3.14;
    printf("Data as float: %.2f\n", d.f);

    return 0;
}
 

 

💡 도움이 되셨다면 댓글과 공감 부탁드립니다! 😊
📌 더 많은 알고리즘 풀이와 프로그래밍 자료는 블로그에서 확인하세요!
✉️ 문의나 피드백은 댓글이나 이메일로 남겨주세요.

 

 

반응형