본문 바로가기
IT/c언어

C 언어 구조체를 함수의 인자로 전달하는 방법

by 뉴코딩맨 2023. 7. 19.
C 언어에서 구조체는 관련된 여러 변수들을 하나로 묶어서 새로운 데이터 타입을 정의하는 방법입니다. C 언어에서 구조체를 함수의 인자로 전달하는 방법에 대해 설명하겠습니다.
 
 

구조체를 함수의 인자로 전달하기

 
C 언어에서는 구조체를 함수의 인자로 전달할 수 있습니다. 이를 통해 함수 내부에서 구조체 멤버들을 사용하거나 수정할 수 있습니다.
 
#include <stdio.h>

struct Point {
    int x;
    int y;
};

void printPoint(struct Point p) {
    printf("x: %d, y: %d\n", p.x, p.y);
}

void updatePoint(struct Point *p, int newX, int newY) {
    p->x = newX;
    p->y = newY;
}

int main() {
    struct Point p1 = {3, 5};

    printPoint(p1);
    updatePoint(&p1, 7, 9);
    printPoint(p1);

    return 0;
}
 
위의 예제에서는 구조체 Point를 정의하고 printPoint 함수와 updatePoint 함수를 선언하고 있습니다. printPoint 함수는 구조체 Point를 인자로 받아 해당 구조체의 멤버들을 출력합니다. updatePoint 함수는 구조체 포인터를 인자로 받아 해당 구조체의 멤버들을 업데이트합니다.

 

 

구조체를 함수에 전달할 때 주의사항

구조체를 함수에 전달할 때, 함수에 인자로 구조체를 복사하는 방식과 구조체 포인터를 사용하는 방식 두 가지가 있습니다.
 

구조체 복사 방식

 

void modifyPoint(struct Point p) {
    p.x = 10;
    p.y = 20;
}

int main() {
    struct Point p1 = {3, 5};

    printPoint(p1);
    modifyPoint(p1);
    printPoint(p1);

    return 0;
}
 
위의 예제에서 modifyPoint 함수는 구조체 Point를 인자로 받아 해당 구조체의 멤버들을 수정하려고 합니다. 하지만 함수 내부에서 이루어지는 수정은 함수 외부의 구조체 p1에 영향을 미치지 않습니다. 이는 함수에 구조체가 복사되어 전달되기 때문입니다.
 

구조체 포인터 방식

 

void modifyPoint(struct Point *p) {
    p->x = 10;
    p->y = 20;
}

int main() {
    struct Point p1 = {3, 5};

    printPoint(p1);
    modifyPoint(&p1);
    printPoint(p1);

    return 0;
}

 

위의 예제에서는 modifyPoint 함수가 구조체 포인터를 인자로 받도록 수정되었습니다. 이제 함수 내부에서 구조체 포인터를 이용하여 구조체 p1의 멤버들을 수정할 수 있습니다. 이렇게 하면 함수 외부에서도 구조체의 멤버들이 수정됩니다.
 

결론

C 언어에서는 구조체를 함수의 인자로 전달하여 함수 내부에서 구조체 멤버들을 사용하거나 수정할 수 있습니다. 구조체를 함수에 전달할 때에는 구조체 복사 방식과 구조체 포인터 방식 두 가지 방법 중 적합한 방법을 선택해야 합니다. 구조체를 올바르게 활용하여 효율적인 코드를 작성해 보시기 바랍니다.

 

 

구조체 (Structure) typedef

C 언어에서 구조체 (Structure)는 관련된 여러 변수들을 하나로 묶어서 새로운 데이터 타입을 정의하는 방법입니다. 구조체에 대해 typedef를 사용하여 새로운 데이터 타입을 선언하는 방법에 대해

newcodingman.tistory.com

 

댓글