산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> C 언어

C++ 구조체(struct) 완벽 가이드: 선언, 인스턴스, 포인터, 함수 인자 전달

C++에서 구조체(Struct)란?

STRUCT는 서로 다른 데이터 타입의 요소들을 함께 저장하는 데 사용할 수 있는 C++ 데이터 구조입니다. C++에서 구조체는 사용자 정의 데이터 타입입니다. 구조체는 서로 다른 데이터 타입의 항목들을 단일 데이터 타입으로 그룹화하는 데이터 타입을 생성합니다.

예를 들어:

어떤 사람의 이름, 국적, 나이에 대한 정보를 저장해야 한다고 가정해 보세요. name, citizenship, age 같은 변수들을 만들어 데이터를 개별적으로 저장할 수 있습니다.

하지만 미래에 여러 사람에 대한 정보를 저장해야 할 수도 있습니다. 그러면 다른 개인들을 위한 변수들이 생성될 것입니다. 예: name1, citizenship1, age1 등. 이를 피하려면 구조체를 만드는 것이 좋습니다.

이 C++ 튜토리얼에서 배울 내용:

언제 구조체를 사용하는가?

C++에서 구조체 사용 이유:

C++ 구조체 초기화

C++ 구조체를 만들려면 struct 키워드 뒤에 식별자를 사용합니다. 식별자가 구조체 이름이 됩니다. C++ 구조체 생성 문법은 다음과 같습니다:

문법:

struct struct_name {
    // struct members
} 

위 문법에서 struct 키워드를 사용했습니다. struct_name은 구조체 이름입니다.

구조체 멤버는 중괄호 안에 추가됩니다. 이 멤버들은 아마도 서로 다른 데이터 타입에 속할 것입니다.

예를 들어:

struct Person {
    char name[30];
    int citizenship;
    int age;
} 

위 예제에서 Person은 세 멤버를 가진 구조체입니다. 멤버는 name, citizenship, age입니다. 한 멤버는 char 타입이고 나머지 둘은 정수입니다. 구조체가 생성될 때는 메모리가 할당되지 않습니다. 구조체에 변수가 추가된 후에만 메모리가 할당됩니다.

구조체 인스턴스 생성

위 예제에서 Person이라는 구조체를 만들었습니다. 구조체 변수는 다음과 같이 생성할 수 있습니다:

Person p; 

p는 Person 타입의 구조체 변수입니다. 이 변수를 사용하여 구조체 멤버에 접근할 수 있습니다.

구조체 멤버 접근

구조체 멤버에 접근하려면 구조체 인스턴스와 점(.) 연산자를 사용합니다. 예를 들어 구조체 Person의 age 멤버에 접근하려면:

p.age = 27; 

구조체 인스턴스 p를 사용하여 구조체 Person의 멤버 age에 접근했습니다. 그런 다음 멤버 age의 값을 27로 설정했습니다.

예제 1:

#include <iostream>
using namespace std;
struct Person {
    int citizenship;
    int age;
};
int main(void) {
    struct Person p;
    p.citizenship = 1;
    p.age = 27;
    cout << "Person citizenship: " << p.citizenship << endl;
    cout << "Person age: " << p.age << endl;
    return 0;
} 

출력:

C++ 구조체(struct) 완벽 가이드: 선언, 인스턴스, 포인터, 함수 인자 전달

코드 스크린샷:

C++ 구조체(struct) 완벽 가이드: 선언, 인스턴스, 포인터, 함수 인자 전달

코드 설명:

  1. 프로그램에 iostream 헤더 포함하여 정의된 함수 사용
  2. std 네임스페이스 포함하여 클래스 직접 사용
  3. Person이라는 구조체 생성
  4. 구조체 본문 시작
  5. citizenship이라는 정수 타입 구조체 멤버 생성
  6. age라는 정수 타입 구조체 멤버 생성
  7. 구조체 본문 끝
  8. main() 함수 호출. 프로그램 로직은 이 함수 본문 내에 추가
  9. 구조체 Person의 인스턴스 생성하고 이름 p 부여
  10. 구조체 멤버 citizenship 값을 1로 설정
  11. 구조체 멤버 age 값을 27로 설정
  12. 구조체 멤버 citizenship 값을 다른 텍스트와 함께 콘솔 출력
  13. 구조체 멤버 age 값을 다른 텍스트와 함께 콘솔 출력
  14. 프로그램 성공 실행 시 값 반환
  15. main() 함수 끝

구조체 포인터

구조체를 가리키는 포인터를 생성할 수 있습니다. int, float, double 같은 네이티브 데이터 타입을 가리키는 포인터 생성과 유사합니다. C++에서 포인터는 메모리 위치를 저장한다는 점에 유의하세요.

예제 2:

#include <iostream>
using namespace std;
struct Length {
    int meters;
    float centimeters;
};
int main() {
    Length *ptr, l;
    ptr = &l;
    cout << "Enter meters: ";
    cin >> (*ptr).meters;
    cout << "Enter centimeters: ";
    cin >> (*ptr).centimeters;
    cout << "Length = " << (*ptr).meters << " meters " << (*ptr).centimeters << " centimeters";
    return 0;
} 

출력:

C++ 구조체(struct) 완벽 가이드: 선언, 인스턴스, 포인터, 함수 인자 전달

코드 스크린샷:

C++ 구조체(struct) 완벽 가이드: 선언, 인스턴스, 포인터, 함수 인자 전달

코드 설명:

  1. 프로그램에 iostream 헤더 포함하여 함수 사용
  2. 프로그램에 std 네임스페이스 포함하여 클래스 직접 사용
  3. Length라는 구조체 생성
  4. 구조체 Length 본문 시작
  5. meters라는 정수 타입 구조체 멤버 생성
  6. centimeters라는 정수 타입 구조체 멤버 생성
  7. 구조체 Length 본문 끝
  8. main() 함수 호출
  9. main() 함수 본문 시작
  10. Length 타입의 포인터 변수 *ptr과 일반 변수 l 생성
  11. 변수 l의 주소를 포인터 변수에 저장
  12. 콘솔에 메시지 표시하여 meters 변수 값 입력 요청
  13. 키보드로 사용자 입력 읽기. 멤버 meters는 포인터 변수로 접근
  14. 콘솔에 메시지 표시하여 centimeters 변수 값 입력 요청
  15. 키보드로 사용자 입력 읽기. 멤버 centimeters는 포인터 변수로 접근
  16. 사용자로부터 읽은 값들을 다른 텍스트와 함께 콘솔 출력
  17. 프로그램 성공 실행 시 값 반환
  18. main() 함수 본문 끝

함수 인자로 구조체 전달

구조체를 함수 인자로 전달할 수 있습니다. 이는 일반 인자 전달과 같은 방식으로 수행됩니다. 구조체 변수도 함수에 전달 가능합니다. 좋은 예는 구조체 멤버 값들을 표시해야 할 때입니다. 이를 시연해 보겠습니다:

예제 3:

#include<iostream>
using namespace std;
struct Person {
    int citizenship;
    int age;
};
void func(struct Person p);
int main() {
    struct Person p;
    p.citizenship = 1;
    p.age = 27;
    func(p);
    return 0;
}
void func(struct Person p) {
    cout << " Person citizenship: " << p.citizenship<<endl;
    cout << " Person age: " << p.age;
} 

출력:

C++ 구조체(struct) 완벽 가이드: 선언, 인스턴스, 포인터, 함수 인자 전달

코드 스크린샷:

C++ 구조체(struct) 완벽 가이드: 선언, 인스턴스, 포인터, 함수 인자 전달

코드 설명:

  1. iostream 헤더 파일을 우리 파일에 포함. 그러면 오류 없이 함수 사용 가능
  2. 프로그램에 std 네임스페이스 포함하여 클래스 사용. 네임스페이스 호출 없이 클래스 사용 가능
  3. Person이라는 구조체 생성
  4. 구조체 Person 본문 시작
  5. 구조체 Person의 멤버 생성. 멤버 이름은 citizenship이고 타입은 정수
  6. 구조체 Person의 멤버 생성. 멤버 이름은 age이고 타입은 정수
  7. 구조체 Person 본문 끝
  8. 구조체 Person의 인스턴스 p를 인자로 받는 함수 생성
  9. main 함수 호출. { 는 main() 함수 본문 시작 표시
  10. 구조체 Person의 인스턴스 생성하고 이름 p 부여
  11. 구조체 인스턴스 p를 사용하여 구조체 멤버 변수 citizenship 접근하고 값 1 할당
  12. 구조체 인스턴스 p를 사용하여 구조체 멤버 변수 age 접근하고 값 27 할당
  13. 함수 호출하며 구조체 Person의 인스턴스 p를 인자로 전달
  14. 함수는 성공 실행 시 값 반환
  15. main() 함수 본문 끝
  16. 함수 본문 생성
  17. 함수 본문 시작
  18. 구조체 멤버 citizenship 값 접근하여 다른 텍스트와 함께 콘솔 출력
  19. 구조체 멤버 age 값 접근하여 다른 텍스트와 함께 콘솔 출력
  20. 함수 본문 끝

C++ 구조체의 한계

다음은 구조체들의 한계입니다:

요약:

C 언어

  1. C 구조체와 포인터 마스터하기: 실전 가이드
  2. C++ do-while 루프: 문법, 실전 예제, 중첩 루프
  3. C++ switch-case 마스터하기: 문법, 활용법, 실전 예제
  4. C++ 동적 배열 할당 완벽 가이드: new, delete, 실전 코드 예제
  5. C++ 포인터 완전 정복: 개념, 예제, 실전 활용
  6. C++ char 타입 마스터: 선언, ASCII 코드, 문자열 변환 기법
  7. C++ 연산자 오버로딩 실전 가이드: 문법, 접근법, 코드 예제
  8. C++ std::list 마스터하기: 문법, 함수, 실전 예제
  9. C++ 함수 완전 정복: 실전 코드 예제로 이해하기
  10. C++ 구조체 vs 클래스: 핵심 차이, 문법, 최적 사용 사례