구조체의 정의 해석 및 사용 상해

4387 단어
구조의 정의는 하나의 구조의 일반적인 형식을 정의한다. struct 구조명 {구성원표열}구성원표는 몇 개의 구성원으로 구성되고 각 구성원은 이 구조의 한 구성 부분이다.각 멤버에 대해서도 반드시 유형 설명을 해야 한다.예를 들면 다음과 같습니다.
 
  
struct stu
{
int num;
char name[20];
int age;
}

구조 유형 변수의 설명 구조체 정의는 하나의 변수를 정의하는 것이 아니라 하나의 변수를 정의하는 것이다
데이터 형식, 이 형식은 당신이 정의한 것입니다. 언어 자체가 가지고 있는 간단한 데이터 형식과 같이 사용할 수 있습니다. (예: int)
구조체 자체는 데이터로 메모리를 개척하지 않는다. 진정으로 데이터로 메모리에 저장된 것은 이런 구조체가 정의한 변수이다.
하나의 구조체 변수는 얼마나 큰 메모리 공간을 차지합니까?이것은 이런 구조체 유형의 정의에 의해 결정되는 것으로 구조체의 모든 구성원을 동시에 저장하기 위해
그러면 구조체 변수의 저장 크기는 모든 분량의 저장 공간의 총합이어야 한다.
구조 변수는 다음과 같은 세 가지 방법이 있음을 설명한다.위에서 정의한stu를 예로 들어 설명하다.
1. 구조를 정의하고 구조 변수를 설명한다.예:
 
  
struct stu
{
int num;
char name[20];
int age;
};
struct stu boy1,boy2;

두 변수인 boy1과 boy2는stu구조 유형임을 설명했다.
매크로 정의를 사용하여 다음과 같은 구조 유형을 나타내는 기호 상수를 지정할 수도 있습니다.
 
  
#define STU struct stu
STU
{
int num;
char name[20];
int age;
};
STU boy1,boy2; 

2. 구조 유형을 정의하는 동시에 구조 변수를 설명한다.예를 들면 다음과 같습니다.
 
  
struct stu
{
int num;
char name[20];
int age;
}boy1,boy2;

3. 구조 변수를 직접 설명한다.예를 들면 다음과 같습니다.
 
  
struct
{
int num;
char name[20];
int age;
}boy1,boy2; 

세 번째 방법과 두 번째 방법의 차이는 세 번째 방법에서 구조명을 생략하고 구조 변수를 직접 제시하는 데 있다.
boy1, boy2 변수가stu 유형이라는 것을 설명한 후 이 두 변수 중의 각 구성원에게 값을 부여할 수 있다.
상기stu구조 정의에서 모든 구성원은 기본 데이터 형식이나 그룹 형식입니다.구성원도 하나의 구조일 수 있다. 즉, 중첩된 구조를 구성한다.
예를 들면 다음과 같습니다.
 
  
struct date{
int month;
int day;
int year;
}
struct{
int num;
char name[20];
struct date birthday;
}boy1,boy2;

구조 변수 구성원을 사용하는 일반적인 형식은 구조 변수 이름이다.구성원 이름:
boy1.num
/*즉 첫 번째 사람의 학번*/
만약 구성원 자체가 또 하나의 구조라면 반드시 단계별로 최저급 구성원을 찾아야만 사용할 수 있다.
예: boy 1.birthday.month
즉 첫 번째 사람이 태어난 달 구성원은 프로그램에서 단독으로 사용할 수 있으며 일반 변수와 완전히 같다. 
구조 변수의 초기화: 다차원 그룹의 초기화와 유사합니다.구조 변수의 값은 구조체 변수의 구성원에 대해 하나하나 값을 부여할 수 있다. 이런 방식은 수조와 비슷하다. 수조는 원소마다 값을 부여하는 것이다(수조에 대해서는 초기화되지 않으면 선택의 여지가 없다. 이렇게 값을 부여할 수밖에 없다).
배열과 달리 표준 C의 구조체 변수는 전체적으로 값을 부여할 수 있습니다.
예1:
 
  
#include
int main(void)
{
    struct student
    {
        long int num;
        int      age;
        char*    name;
    }st1={200,18,"zhangsan"};
    struct student  st2,st3; 
    printf("    NO.    age    name   /n");
    printf("   %ld    %d   %s/n",st1.num,st1.age,st1.name);
    getch();
    st2.num=199;
    st2.age=19;
    st2.name="lisi";
    printf("   %ld    %d   %s/n",st2.num,st2.age,st2.name);
    getch();
    st3=st2;
    printf("   %ld    %d   %s/n",st3.num,st3.age,st3.name);
    getch();
    printf("/n/n   struct student:%d",sizeof(struct student));
    getch();
    return 0;
}

예2:
 
  
#include
#include
struct birth
    {
        int year;
        int month;
        int day;
    };
struct student
    {
        long int num;
        struct  birth  birthday;
        char*    name;
    }st1={200,{1988,8,8},"zhangsan"};
int main(void)
{
    struct student  st2;
    st2=st1;
    printf("   %ld     %s  %d/n",st2.num,st2.name,sizeof(int));
    printf("   year: %d   month: %d   month: %d/n",
                st2.birthday.year,
                st2.birthday.month,
                st2.birthday.day);
    getch();
    return 0;
}

구조체 변수에 여러 문자를 저장하는 구성원이 있을 때, 그것을 그룹으로 정의하는 것을 권장합니다. (예를 들어 앞의 이름 구성원, 그룹이 얼마나 넓게 열릴지 모르면 지침으로 정의할 수도 있습니다.)바늘 변수는 실제 데이터를 저장할 수 없고 주소만 저장할 수 없기 때문이다.

좋은 웹페이지 즐겨찾기