auの日記

プログラミング初心者の日記。(auはハンドルネームです)

複合リテラルとは

auです。
今回は複合リテラルについて調べました。

複合リテラルとは

複合リテラルとは、配列や構造体の名前なしでオブジェクトを宣言するためのリテラルです。

#include <stdio.h>

typedef struct {
        int id;
        char name[30];
    } student_t;

void print(student_t *p) {
    printf("id: %d\n", p->id);
    printf("name: %s\n", p->name);
}

int main(void) {
    student_t student1 = {.id = 1, .name = "Suzuki"};
    print(&student1);
    // 複合リテラルを使用する
    print(&(student_t) {.id = 2, .name = "Kazama"});
    return 0;
}

// 実行結果
id: 1
name: Suzuki
id: 2
name: Kazama

このように、構造体名を宣言せずに書くことができます。
関数の外で宣言しているとstatic記憶期間になり、それ以外だとautomatic記憶期間になります。