C++에서 구조 체 의 유형 정의 와 초기 화 및 변수 참조

8945 단어 C++
C+구조 체 형식의 정의 와 초기 화
사용자 가 편리 하 게 사용 할 수 있 도록 다양한 유형의 데 이 터 를 유기적인 전체 로 조합 해 야 할 때 도 있다.이 조합 들 이 하나의 전체 에서 의 데 이 터 는 서로 연결 되 어 있다.예 를 들 어 한 학생 의 학 번,성명,성별,연령,성적,가정 주소 등 은 모두 이 학생 의 속성 이다.그림 참조.

학 번(num),이름(name),성별(sex),나이(age),성적(score),주소(addr)를 볼 수 있 습 니 다.프로그램 에서 num,name,sex,age,score,addr 를 각각 독립 된 변수 로 정의 하면 그들의 내 적 관 계 를 반영 하기 어렵다.그것들 을 하나의 조합 항목 으로 구성 해 야 한다.하나의 조합 항목 에는 몇 가지 유형 이 다른(물론 같 을 수도 있다)데이터 항목 이 포함 되 어 있다.C 와 C++는 사용자 가 스스로 이러한 데이터 형식 을 지정 할 수 있 도록 합 니 다.이 를 구조 체 라 고 합 니 다.그것 은 다른 고급 언어의 기록(record)에 해당 한다.
예 를 들 어 아래 의 성명 을 통 해 그림 과 같은 데이터 형식 을 만 들 수 있다.

struct Student//         Student
{
  int num; //        num
  char name[20]; //        name,    20   
  char sex; //        sex
  int age;  //        age
  float score;  //          
  char addr[30]; //        addr,    30   
}; //       
이렇게 해서 프로그램 설계 자 는 새로운 구조 체 유형 Student(struct 는 구조 체 유형 을 설명 할 때 반드시 사용 해 야 하 는 키워드 로 생략 할 수 없습니다)를 컴 파일 시스템 에 설명 했다.이것 은 num,name,sex,age,score,addr 등 서로 다른 유형의 데이터 항목 을 포함 하 는 구조 체 유형 이다.Student 는 하나의 유형 명 으로 시스템 이 제공 하 는 표준 유형(예 를 들 어 int,char,float,double)과 같이 변 수 를 정의 할 수 있 습 니 다.다만 구조 체 유형 은 사용자 가 미리 설명 해 야 할 뿐 입 니 다.
구조 체 유형 을 설명 하 는 일반적인 형식 은 다음 과 같 습 니 다.

  struct        {    };
구조 체 유형 명 은 구조 체 유형의 표지 로 쓰 인 다.위의 성명 에서 Student 는 구조 체 유형 명 이다.대괄호 안 은 이 구조 체 의 모든 구성원(member)으로 특정한 구조 체 를 구성한다.상례 의 num,name,sex,score 등 은 모두 구조 체 의 구성원 이다.하나의 구조 체 유형 을 설명 할 때 각 구성원 에 대해 유형 성명 즉 유형 명 구성원 이름 을 해 야 합 니 다.모든 구성원 을 구조 체 중의 한 도 메 인(field)이 라 고도 부른다.구성원 표 열 을 도 메 인 표 라 고도 부른다.
구조 체 형식의 위 치 는 일반적으로 파일 의 시작 에 있 습 니 다.모든 함수(main 함수 포함)전에 이 파일 의 모든 함수 가 변 수 를 정의 할 수 있 도록 합 니 다.물론 함수 에서 구조 체 유형 을 설명 할 수도 있다.
C 언어 에서 구조 체 의 구성원 은 데이터 일 수 밖 에 없다(위의 예 에서 보 듯 이).C++이 를 확대 하면 구조 체 의 구성원 은 데이터(즉 데이터 구성원)도 포함 할 수 있 고 함수(즉 함수 구성원)도 포함 하여 대상 을 대상 으로 하 는 프로그램 설계 에 적응 할 수 있다.
그러나 C++는 클래스(class)유형 을 제공 하기 때문에 일반적인 상황 에서 함수 가 있 는 구조 체 를 사용 할 필요 가 없 기 때문에 이 장 에 서 는 데이터 구성원 만 포함 하 는 구조 체 만 소개 하고 함수 구성원 을 포함 하 는 구조 체 는 후속 장 에서 소개 할 것 이다.
구조 체 형식 변수의 정의 방법 및 초기 화
이상 은 하나의 구조 체 유형 만 지 정 했 을 뿐 하나의 모델 에 해당 하지만 그 중에서 구체 적 인 데이터 가 없고 시스템 도 이 를 위해 실제 메모리 유닛 을 분배 하지 않 습 니 다.프로그램 에서 구조 체 형식의 데 이 터 를 사용 할 수 있 도록 구조 체 형식의 변 수 를 정의 하고 그 중에서 구체 적 인 데 이 터 를 저장 해 야 합 니 다.
구조 체 유형 변 수 를 정의 하 는 방법 은 다음 과 같은 세 가지 방법 으로 구조 체 유형의 변 수 를 정의 할 수 있다.
1)구조 체 유형 을 먼저 설명 하고 변수 이름 을 정의 한다.
위 에서 구조 체 유형 Student 를 정의 한 경우 구조 체 변 수 를 정의 할 수 있 습 니 다.예:

C 언어 에서 구조 체 변 수 를 정의 할 때 구조 체 유형 명 앞 에 키워드 Sttut 를 붙 여야 합 니 다.C++는 C 의 용법 을 유지 합 니 다.예 를 들 어:
struct  Student  studentl, student2;
독자 가 C++프로그램 을 작성 할 때 C++에서 새로 제시 한 방법 을 사용 하 는 것 을 권장 합 니 다.즉,구조 체 변 수 를 정의 할 때 키워드 Struct 를 추가 하지 않 아 도 됩 니 다.이렇게 사용 하 는 것 이 더욱 편리 하고 제8 장 에서 소개 한 클래스(class)이름 정의 대상 의 용법 과 일치 합 니 다.
이상 은 student 1 과 student 2 를 구조 체 유형 Student 의 변수 로 정 의 했 습 니 다.즉,Student 유형의 구 조 를 가지 고 있 습 니 다.그림 에서 보 듯 이.

구조 체 변 수 를 정의 한 후에 시스템 은 메모리 셀 을 분배 합 니 다.예 를 들 어 student 1 과 student 2 는 메모리 에서 각각 63 개의 바이트(4+20+1+4+4+30=63)를 차지한다.
2)성명 형식 과 동시에 변 수 를 정의 합 니 다.예 를 들 면:

struct Student //       Student
{
  int num;
  char name[20];
  char sex;
  int age;
  float score;
  char addr[30];
}student1, student2; //         Student   student1,student2
이러한 형식의 정의 의 일반적인 형식 은 다음 과 같다.

struct     
{
      
}     ;
3)구조 체 유형 변 수 를 직접 정의 한다.그 일반적인 형식 은:

struct //          
{
      
}     ;
이런 방법 은 비록 합 법 적 이지 만 거의 사용 되 지 않 는 다.유형 을 먼저 정의 한 후에 변 수 를 정의 하 는 제(1)방법 을 제창한다.프로그램 이 비교적 간단 하고 구조 체 유형 이 본 파일 에서 만 사용 되 는 경우 에 도 제(2)방법 을 사용 할 수 있다.
구조 체 유형 에 대해 몇 가지 설명 이 있 습 니 다.
1)구조 체 유형 이 모두 같은 구 조 를 가지 고 있다 고 착각 하지 말 아야 한다.실제로 모든 구조 체 유형 은 자신의 구 조 를 가지 고 여러 가지 구체 적 인 구조 체 유형 을 정의 할 수 있다.
2)유형 과 변 수 는 서로 다른 개념 이 므 로 혼동 하지 마 십시오.구조 체 변수 중의 구성원 에 게 만 값 을 부여 할 수 있 을 뿐 구조 체 유형 에 대해 서 는 값 을 부여 할 수 없습니다.컴 파일 할 때 형식 에 공간 을 분배 하지 않 고 변수 에 만 공간 을 분배 합 니 다.
3)구조 체 중의 구성원(즉'도 메 인')에 대해 단독으로 사용 할 수 있 고 그의 역할 과 위 치 는 일반 변수 에 해당 한다.
4)구성원 도 하나의 구조 체 변수 일 수 있다.예:

struct Date //         Date
{
  int month;
  int day;
  int year;
};
struct Student //         Student
{
  int num;
  char name[20];
  char sex;
  int age;
  Date birthday;
  char addr[30];
}student1, student2; //  student1 student2      Student   
먼저 Date 형식 을 설명 합 니 다.'날짜'는 3 명의 구성원 을 포함 합 니 다.rnomh(월),day(일),year(년)입 니 다.그리고 Studcm 형식 을 설명 할 때 멤버 birthday 를 Date 형식 으로 지정 합 니 다.Student 의 구 조 는 그림 과 같다.설 명 된 형식 Date 와 다른 유형(예 를 들 어 im,char)-처럼 구성원 의 유형 을 정의 할 수 있 습 니 다.

5)구조 체 의 구성원 명 은 프로그램의 변수 명 과 같 을 수 있 으 나 둘 은 관계 가 없다.예 를 들 어 프로그램 에서 하나의 정형 변수 num 을 따로 정의 할 수 있 는데 이것 은 student 의 num 과 는 별 개의 것 이 고 서로 영향 을 주지 않 습 니 다.
구조 체 변수의 초기 화
다른 유형의 변수 와 마찬가지 로 구조 체 변 수 를 정의 할 때 초기 값 을 지정 할 수 있 습 니 다.예:

struct Student
{
  int num;
  char name[20];
  char sex;
  int age;
  float score;
  char addr[30];
}student1={10001, "Zhang Xin", 'M', 19, 90.5, "Shanghai"};
이렇게 하면 변수 student 1 의 데 이 터 는 그림 과 같다.
또한 성명 형식 과 정의 변 수 를 분리 하 는 형식 으로 변 수 를 정의 할 때 초기 화 할 수 있 습 니 다.

Student student2 = { 10002, "Wang Li", "F", 20, 98, "Beijing"}; //Student          
C+구조 체 변수의 인용
구조 체 변 수 를 정의 한 후에 당연히 이 변 수 를 인용 할 수 있 고 자주 사용 하 는 방법 은 다음 과 같은 몇 가지 가 있다.
1)하나의 구조 체 변수의 값 을 같은 구 조 를 가 진 다른 구조 체 변수 에 부여 할 수 있다.
위의 student 1 과 student 2 는 모두 student 형식의 변수 입 니 다.이렇게 값 을 부여 할 수 있 습 니 다.

  student1= student2;
2)구조 체 변수 중 한 구성원 의 값 을 참조 할 수 있 습 니 다.
예 를 들 어 student 1.num 은 구조 체 변수 student 1 의 구성원 의 값 을 나타 내 고 student 1 의 값 이 그림 과 같 으 면 student 1.num 의 값 은 10001 이다.
구조 체 변수 에서 구성원 을 참조 하 는 일반적인 방식 은 다음 과 같 습 니 다.

        .   
예 를 들 어 변수의 구성원 에 게 값 을 부여 할 수 있 습 니 다.

  student1.num=10010;
3)구성원 자체 도 하나의 구조 체 유형 이 라면 여러 구성원 연산 자 를 사용 하여 1 급 1 급 으로 가장 낮은 구성원 을 찾 아야 한다.
예 를 들 어 위 에서 정 의 된 구조 체 변수 student 1 에 대해 각 구성원 에 게 이렇게 접근 할 수 있 습 니 다.

  student1.num (       student1  num  )
student 1 변수 중의 birthday 멤버 중 month 멤버 를 인용 하려 면 student 1.month 라 고 쓸 수 없습니다.한 단계 씩 인용 해 야 합 니 다.즉,

  student1.birthday.month=12; (       student1  birthday    month  )
4)하나의 구조 체 변 수 를 하나의 전체 로 입력 하고 출력 할 수 없다.
예 를 들 어 student 1 과 student 2 를 구조 체 변수 로 정의 하고 값 이 있 습 니 다.구조 체 변수 에 있 는 각 구성원 의 값 을 이렇게 출력 하려 고 할 수 없습니다.

  cin>>student1;
구조 체 변수 중의 각 구성원 에 게 만 각각 입력 과 출력 을 할 수 있 습 니 다.
5)구조 체 변수의 구성원 은 일반 변수 처럼 각종 연산 을 할 수 있다(그 유형 에 따라 할 수 있 는 연산 종 류 를 결정 한다).예 를 들 면:

  student2.score=student1.score;
  sum=student1.score+student2.score;
  student1.age++;
  ++student1.age;
"."연산 자의 우선 순위 가 가장 높 기 때문에 student 1.age+는(student 1.age)+에 해당 합 니 다.+student 1.age 에 대해 자가 연산 을 하 는 것 이지,먼저 age 에 대해 자가 연산 을 하 는 것 이 아니다.
6)구조 체 변수 구성원 의 주 소 를 인용 할 수도 있 고 구조 체 변수의 주 소 를 인용 할 수도 있다.예:

  cout<<&student1; //  student1    
  cout<<&student1.age; //  student1.age   
구조 체 변수의 주 소 는 주로 함수 매개 변수 로 사용 되 며 구조 체 변수의 주 소 를 형 삼 에 전달 합 니 다.
[예]구조 체 변수 중의 구성원 을 인용 합 니 다.

#include <iostream>
using namespace std;
struct Date//       Date
{
  int month;
  int day;
  int year;
};
struct Student//       Student
{
  int num;
  char name[20];
  char sex;
  Date birthday; //  birthday Date     
  float score;
}student1,student2={10002,"Wang Li",'f',5,23,1982,89.5};
//  Student      student1,student2,  student2   
int main( )
{
  student1=student2; // student2       student1     
  cout<<student1.num<<endl; //  student1  num    
  cout<<student1.name<<endl; //  student1  name    
  cout<<student1.sex<<endl; //  student1  sex    
  cout<<student1.birthday.month<<'/'<<student1.birthday.day<<'/' <<student1.birthday.year<<endl; //  student1  birthday     
  cout<<student1.score<<endl;
  return 0;
}
실행 결 과 는 다음 과 같 습 니 다.

10002
Wang Li
f
5/23/1982
89.5

좋은 웹페이지 즐겨찾기