C 언어 구조 체 (2)

6106 단어 C 언어구조 체
C 언어 구조 체 문법 기초
1. 개술
C 언어 는 사용자 가 스스로 이러한 데이터 구 조 를 지정 할 수 있 도록 합 니 다. 이 는 서로 다른 유형의 데이터 로 하나의 전체 로 조합 하여 사용 할 수 있 도록 합 니 다. 이런 조합 이 하나의 전체 에 있 는 데 이 터 는 서로 관련 되 어 있 습 니 다. 이런 데이터 구 조 는 구조 체 라 고 하 는데 이것 은 고급 언어 에서 기록 하 는 것 과 같 습 니 다.
하나의 구조 체 유형 을 설명 하 는 일반적인 형식 은 다음 과 같다.
struct 구조 체 명
{구성원 목록}; //이 곳 은 " ;” (분점) 아니 "," (쉼표);
예:
struct student
       {
char name[5];
char id[10];
int scores;
       };   //이곳 의 분 호 를 빠 뜨 려 서 는 안 된다. 그렇지 않 으 면 잘못 보고 해 야 한다.
       구조 체 명 은 구조 유형의 표지 로 사용 되 는데 구조 표지 라 고도 부른다. 대괄호 안에 이 구조 체 의 각 구성원 이 있 는데 그들 이 하나의 구조 체 를 구성 하여 각 구성원 에 대해 유형 성명 을 한다.
       여기 있 는 student 는 구조 체 이름 입 니 다. 서로 다른 구조 체 이름 은 서로 다른 구조 체 유형 을 표시 합 니 다. 예 를 들 어 student stu {구성원 변수}, student stu 1 {구성원 변수} 와 다른 구조 체 유형 입 니 다.
2. 구조 체 유형 변 수 를 정의 하 는 방법
앞에서 하나의 구조 체 유형 만 정 의 했 을 뿐 하나의 모델 에 해당 하지만 그 중에서 구체 적 인 데이터 가 없다. 시스템 이 이에 대해 실제 메모리 유닛 을 분배 하지 않 고 프로그램 에서 구조 체 유형의 데 이 터 를 사용 할 수 있 도록 구조 체 유형의 변 수 를 정의 하고 그 중에서 구체 적 인 데 이 터 를 저장 해 야 한다. 다음 과 같은 3 가지 방법 으로 구조 체 유형 변 수 를 정의 할 수 있다.
       (1) 구조 체 유형 을 먼저 정의 하고 변수 이름 을 정의 한다.
         위 에서 구조 체 형식 struct student 를 정의 한 경우 변 수 를 정의 할 수 있 습 니 다. 예 를 들 어:
        struct student stu1;   //이곳 의 struct student 는 함께 사용 해 야 전체 구조 체 유형 을 표시 할 수 있 습 니 다. 그렇지 않 으 면 잘못 보고 할 수 있 습 니 다.
         구조 체 변 수 를 정의 한 후 시스템 은 메모리 셀 을 할당 합 니 다. 예 를 들 어 stu 1 은 메모리 에서 20 개의 바이트 를 차지 합 니 다. 구조 체 변 수 는 메모리 에 메모 리 를 신청 하 는 방법 에 대해 서 는 본 블 로그 의 "C 언어 구조 체 (1)" 를 참조 하 십시오.
       (2) 구조 체 유형 을 정의 할 때 구조 체 유형 변 수 를 함께 정의 한다.
 struct 구조 체 명
         {
 구성원 표 열;
         }변수 명 표 열;
        (3) 구조 체 유형 변 수 를 직접 정의 한다.
         struct             //(2) 와 의 차 이 는 이곳 에서 구조 체 명 을 생략 한 것 이다.
         {
         구성원 표 열;
         } 변수 이름 목록;
        구조 체 유형 에 대해 몇 가지 설명 이 있 습 니 다.
        a. 유형 과 변 수 는 서로 다른 개념 입 니 다. 혼동 이 아니 라 변수 에 대한 할당, 액세스 또는 연산 만 할 수 있 습 니 다. 한 유형 에 대한 할당, 액세스 또는 연산 은 할 수 없습니다. 컴 파일 할 때 유형 에 대해 공간 을 분배 하지 않 고 변수 에 만 공간 을 분배 합 니 다.
        b. 구조 체 의 구성원 에 게 유닛 으로 사용 할 수 있 고 그의 역할 은 일반 변수 에 해당 합 니 다.
        c. 구성원 도 하나의 구조 체 변수 일 수 있다.
        예:
        struct data
        {
        int month;
        int day;
        int year;
        };
       struct student 
       {
       char name[5];
       char id[10];
       strcut data birthday;
        int scores;
        }stu1;
        d. 구성원 이름 은 프로그램의 변수 이름과 구조 체 이름과 같 을 수 있 고 서로 영향 을 주지 않 습 니 다.
3. 구조 체 변수의 인용
       (1) 하나의 구조 체 변 수 를 하나의 전체 로 입력 하고 출력 할 수 없다.
         구조 체 변수 중의 각 구성원 만 각각 입 출력 할 수 있 습 니 다. 구조 체 변수 중의 구성원 을 응용 하 는 방식 은?
         구조 체 변수 명. 구성원 명
         예 를 들 어 stu1. name 은 stu 1 변수 중의 name 구성원 을 표시 합 니 다.
         "." 구성원 (분량) 연산 자 는 모든 연산 자 중에서 우선 순위 가 가장 높 기 때문에 stu1. name 을 하나의 전체 로 볼 수 있 습 니 다.
        (2) 구성원 자체 가 또 하나의 구조 체 유형 에 속한다 면 몇 개의 구성원 연산 자 를 사용 하여 1 급 1 급 으로 가장 낮은 구성원 을 찾 아야 한다. 가장 낮은 구성원 에 게 만 할당 이나 액세스, 연산 을 할 수 있다.
        (3) 구조 체 변수의 구성원 에 대해 일반 변수 처럼 각종 연산 을 할 수 있다 (그 유형 에 따라 할 수 있 는 연산 을 결정 한다).
          ++stu1.socres;
         "." 연산 자의 우선 순위 가 가장 높 기 때문에 stu1. age + 는 stu1. scores 에 대해 자체 연산 을 하 는 것 입 니 다. 먼저 scores 에 대해 자체 연산 을 하 는 것 이 아 닙 니 다.
         (4) 구조 체 변수 구성원 의 주 소 를 참조 할 수 있 습 니 다. 구조 체 변수의 주 소 를 참조 할 수도 있 습 니 다.
           구조 체 변수의 주 소 는 주로 함수 매개 변수 로 구조 체 주 소 를 전달 하 는 데 사용 된다.
4. 구조 체 변수의 초기 화
           다른 유형의 변수 와 마찬가지 로 구조 체 변 수 를 정의 할 때 초기 값 을 지정 할 수 있 습 니 다.
          예:
          struct student
          {
  char name[5];
          char[id];
          int scores;
          }stu1={"sun","20121214",90};
5. 구조 체 배열
         하나의 구조 체 변수 에 한 그룹의 데 이 터 를 저장 할 수 있다 (예 를 들 어 한 학생 의 이름, 학 번, 성적 등 데이터)10 명의 학생 데이터 가 연산 에 참가 해 야 한다 면 분명히 배열 을 사용 해 야 한다. 이것 이 바로 구조 체 배열 이다. 구조 체 배열 과 수치 형 배열 의 차이 점 은 각 배열 요소 가 하나의 구조 체 유형의 데이터 로 각 구성원 을 포함한다 는 것 이다.
6. 구조 체 형식 데 이 터 를 가리 키 는 지침
        구조 체 변수의 지침 은 이 변수 가 차지 하 는 메모리 세그먼트 의 시작 주소 입 니 다. 하나의 포인터 변 수 를 설정 하여 구조 체 변 수 를 가리 킬 수 있 습 니 다. 이때 이 포인터 변수의 값 은 구조 체 변수의 시작 위치 입 니 다. 포인터 변 수 는 구조 체 배열 의 요 소 를 가리 킬 수도 있 습 니 다.
       6.1 구조 체 변 수 를 가리 키 는 지침
       구조 체 변 수 를 가리 키 는 포인터 의 응용:
   #include <string.h>   
   #include <stdio.h>
   #include <stdlib.h>
   struct student
  {
    char id[10];
    char name[5];
    int scores;
  };
   void main()
  {
    struct student stu1;
    struct student *p;
    p=&stu1;
    strcpy(stu1.name,"Sun");
    strcpy(stu1.id,"2012121404");
    stu1.scores=90;
    printf("ID:%s name:%s socres:%f",stu1.id,stu1.name,stu1.socres);
    printf("ID:%s name:%s socres:%f" p->id,p->stu1.name,p->socres);
    printf("ID:%s name:%s socres:%f"(*p).id,(*p).name,(*p).socres);
    system("pause");
  }
        세 개의 printf 출력 결 과 를 볼 수 있 습 니 다.
        C 언어 에서 편리 하고 직관 적 으로 하기 위해 (* p). scores 를 p - > scores 로 대체 할 수 있 습 니 다. 이것 은 * p 가 가리 키 는 구조 체 변수 중의 scores 구성원 을 나타 내 고 똑 같이 (* p). scores 는 p - > scores 와 같 습 니 다.
       즉, 세 가지 형식의 등가 이다.
       구성 변수
       b. (* p). 멤버 명
       c. p - > 멤버 명
       그 중 - > 지향 연산 자가 되다
      6.2 구조 체 배열 을 가리 키 는 지침
      배열 이나 배열 요 소 를 가리 키 는 포인터 와 포인터 변 수 를 사용 할 수 있 으 므 로 구조 체 배열 과 그 요 소 를 포인터 변수 로 가리 킬 수 있 습 니 다.  
   #include <stdio.h>
   #include <stdlib.h>
   struct student
  {
     char id[10];
     char name[5];
     int scores;
   };
   struct student stu[3]={{"1111","sun",18},{"2222","tian",19},{"3333","sheng",20}};
   int main()
   {
     struct student *p;
     printf("No---------------Name--------------scores
"); for(p=stu;p<stu+3;p++) //- printf("%s %-5s %d
",p->id,p->name,p->scores); system("pause"); return 0; }

좋은 웹페이지 즐겨찾기