>  기사  >  백엔드 개발  >  C 언어의 구조체 사용법에 대한 자세한 설명

C 언어의 구조체 사용법에 대한 자세한 설명

藏色散人
藏色散人원래의
2020-03-03 13:48:528208검색

C 언어의 구조체 사용법에 대한 자세한 설명

C 언어의 구조체 사용법에 대한 자세한 설명

C 언어에서는 구조체를 사용하여 다양한 유형의 데이터 집합을 저장할 수 있습니다. 구조체의 정의 형식은 다음과 같습니다.

struct 结构体名{
    结构体所包含的变量或数组
};

구조체는 여러 변수나 배열을 포함하는 모음입니다. 해당 유형은 같을 수도 있고 다를 수도 있습니다.

Recommend "c Language Tutorial"

아래 예를 참조하세요.

struct stu{
    char *name;  //姓名
    int num;  //学号
    int age;  //年龄
    char group;  //所在学习小组
    float score;  //成绩
};

stu는 이름, 번호, 나이, 그룹, 점수 등 5개의 멤버가 포함된 구조 이름입니다. 구조체 멤버는 초기화할 수 없다는 점을 제외하면 변수 및 배열과 동일한 방식으로 정의됩니다.

중괄호 뒤의 세미콜론에 주의하세요. 빠질 수 없습니다. 이는 완전한 문장입니다.

구조는 프로그래머가 직접 정의하고 여러 다른 유형의 데이터를 포함할 수 있는 데이터 유형이기도 합니다.

int, float, char 등과 같은 데이터 유형은 C 언어 자체에서 제공되며 분할할 수 없습니다. 이를 기본 데이터 유형이라고 하며 구조에는 다른 구조뿐만 아니라 여러 기본 유형의 데이터가 포함될 수 있습니다. 이를 복합 데이터 유형 또는 구성된 데이터 유형이라고 부릅니다.

구조 변수

구조는 데이터 유형이므로 이를 사용하여 변수를 정의할 수 있습니다. 예:

struct stu stu1, stu2;

는 두 개의 변수 stu1과 stu2를 정의합니다. 둘 다 stu 유형이고 5개의 멤버로 구성됩니다. struct 키워드는 누락될 수 없습니다.

stu는 "템플릿"과 같으며 정의된 변수는 동일한 속성을 갖습니다. 구조는 "도면"으로, 구조 변수는 "부품"으로 비교할 수도 있습니다. 동일한 도면을 기반으로 생산된 부품은 동일한 특성을 갖습니다.

구조를 정의하는 동안 구조 변수도 정의할 수 있습니다.

char *name; //Name

int num; //Student number

int age; /Study group

float Score; //Score

} stu1, stu2;

구조 정의 끝에 변수를 넣으세요.

stu1, stu2 두 개의 변수만 필요하고 나중에 다른 변수를 정의하기 위해 구조체 이름을 사용할 필요가 없다면 아래와 같이 정의할 때 구조체 이름을 지정할 필요가 없습니다.

struct { //stu A Char *name; // 이름

int num; // 학교 번호

int Age; // 나이

char group; // grade} stu1, stu2 ;

작성은 간단하지만 구조체 이름이 없기 때문에 나중에 새로운 변수를 정의하는 데 구조체를 사용할 수 없습니다.

이론적으로 구조체의 각 멤버는 메모리에 연속적으로 저장되는데 이는 배열과 매우 유사합니다. 예를 들어 위의 구조체 변수 stu1과 stu2의 메모리 분포는 아래 그림과 같으며 전체 메모리를 차지합니다. 4+4+4+1+ 4 = 17바이트입니다.

그러나 컴파일러의 특정 구현에서는 각 멤버 사이에 간격이 있을 수 있습니다. stu1과 stu2의 경우 멤버 변수 그룹과 점수 사이에 3바이트 공백이 채워져 있습니다(아래 그림 참조). 이런 식으로 계산하면 stu1과 stu2는 실제로 17 + 3 = 20바이트를 차지합니다.

멤버 변수 간 "균열"이 발생하는 이유에 대해서는 "C 언어 메모리 필수 사항" 항목의 "어드레싱 효율성 향상을 위한 C 언어 메모리 정렬" 섹션에서 자세히 설명하겠습니다.

구성원 획득 및 할당

구조도 배열과 유사하며 데이터의 집합이므로 전체적인 사용에는 큰 의미가 없습니다. 배열은 단일 요소를 얻기 위해 아래 첨자 [ ]를 사용하고, 단일 요소를 얻기 위해서는 점을 사용합니다. 구조 멤버를 얻는 일반적인 형식은 다음과 같습니다.

结构体变量名.成员名;

이 방법으로 멤버의 값을 얻을 수 있으며 멤버에 값을 할당할 수도 있습니다.

#include <stdio.h>
int main(){
    struct{
        char *name;  //姓名
        int num;  //学号
        int age;  //年龄
        char group;  //所在小组
        float score;  //成绩
    } stu1;
    //给结构体成员赋值
    stu1.name = "Tom";
    stu1.num = 12;
    stu1.age = 18;
    stu1.group = &#39;A&#39;;
    stu1.score = 136.5;
    //读取结构体成员的值
    printf("%s的学号是%d,年龄是%d,在%c组,今年的成绩是%.1f!\n", stu1.name, stu1.num, stu1.age, stu1.group, stu1.score);
    return 0;
}

작업 결과:

Tom의 학생 번호는 12입니다. 나이는 18세, A조에 속해 있으며 올해 득점은 136.5점입니다!

멤버에게 하나씩 값을 할당하는 것 외에도 정의 중에 전체적으로 값을 할당할 수도 있습니다. 예:

struct{
    char *name;  //姓名
    int num;  //学号
    int age;  //年龄
    char group;  //所在小组
    float score;  //成绩
} stu1, stu2 = { "Tom", 12, 18, &#39;A&#39;, 136.5 };

그러나 전체 할당은 사용 중에 구조 변수를 정의할 때로 제한됩니다. 멤버에게 하나씩만 값을 할당할 수 있습니다. 이는 배열의 정의와 매우 유사합니다.

구조는 변수 생성을 위한 템플릿이며 메모리 공간을 차지하지 않는 사용자 정의 데이터 유형입니다. 구조 변수는 실제 데이터만 포함하고 저장하려면 메모리 공간이 필요합니다.

프로그래밍과 관련된 더 많은 내용은 PHP 중국어 홈페이지

프로그래밍 입문

칼럼을 주목해주세요!

위 내용은 C 언어의 구조체 사용법에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.