itsource

구조물 변수에 값 할당

mycopycode 2023. 8. 15. 11:05
반응형

구조물 변수에 값 할당

구조물 유형은 다음과 같이 정의됩니다.

typedef struct student{
    int id;
    char* name;
    double score;
} Student;

저는 Student 유형의 변수를 구성하고 값을 할당하고 싶습니다.어떻게 하면 효율적으로 할 수 있을까요?

int main(){
    Student s1;

    int id = 3;

    char* name = getName(id);

    double score = getScore(id);

    /*Error
    s1 = {id, name, score};
    */

    /*  Can I avoid assigning values individually?
    s1->id = id;
    s1->name = name;
    s1->score= score;
    */

    return 0;
}

C99 표준에서는 복합 리터럴을 사용하여 값을 할당할 수 있습니다.

Student s1;
s1 = (Student){.id = id, .name = name, .score = score};

주의하세요, 구조와 구조에 대한 포인터는 두 가지 다른 것입니다.

C는 다음을 제공합니다.

  • struct 초기화(선언 시에만 해당):

    struct Student s1 = {1, "foo", 2.0 }, s2;
    
  • 구조체 복사본:

    struct Student s1 = {1, "foo", 2.0 }, s2;
    s2 = s1;
    
  • 직접 요소 액세스:

    struct Student s1 ;
    s1.id = 3;
    s1.name = "bar";
    s1.score = 3.0;
    
  • 포인터를 통한 조작:

    struct Student s1 = {1, "foo", 2.0 }, s2, *ps3;
    ps3 = &s2;
    ps3->id = 3;
    ps3->name = "bar";
    ps3->score = 3.0;
    
  • 초기화 기능:

    void initStudent(struct Student *st, int id, char *name, double score) {
        st->id = id;
        st->name = name;
        st->score = score;
    }
    ...
    int main() {
        ...
        struct Student s1;
        iniStudent(&s1, 1, "foo", 2.0);
        ...
    }
    

(또는 기타 관련 C 표준) 중에서 선택합니다.s1 = {id, name, score};구문 오류일 뿐입니다 ;-)

값을 개별적으로 할당하지 않아도 됩니까?

값이 이미 유사한 부분에 포함된 경우 가능합니다.struct즉, 다음을 수행할 수 있습니다.

Student s1 = {.id = id, .name = name, .score = score};

그것은 의 예를 만듭니다.Student지정한 필드를 초기화합니다.이것은 아마도 개별적으로 값을 할당하는 것보다 더 효율적이지는 않지만 코드를 간결하게 유지합니다.그리고 일단 당신이 존재한다면,Student인스턴스(instance)는 단순 할당으로 복사할 수 있습니다.

Student s2;
s2 = s1;    // copies the contents of s1 into s2

값이 모두 개별 변수에 있고 초기화하지 않는 경우Student그러면 값을 개별적으로 할당해야 합니다.그러나 언제든지 이를 수행하는 함수를 작성할 수 있으므로 다음과 같은 작업을 수행할 수 있습니다.

setupStudent(s3, id, name, score);

그러면 코드를 짧게 유지하고, 구조물이 매번 동일한 방식으로 채워지도록 보장하며, 정의할 때(만약 그렇지 않다면) 당신의 삶을 단순화할 것입니다.Student변화들.

언급URL : https://stackoverflow.com/questions/32698293/assign-values-to-structure-variables

반응형