4

次の宣言の目的は何ですか?

struct test
{
     int field1;
     int field2[0];
};
4

3 に答える 3

0

カプセル化用です。

詳細を知らなくてもインターフェースを作成するために使用されます。以下は簡単な例です。

test.h (インターフェース) には、2 つのフィールドを持つ構造体 test_t があることが示されています。3 つの機能があります。1 つ目は、構造を作成することです。set_x は、整数を構造体に格納することです。get_x は、格納された整数を取得することです。

では、いつ x を保存できますか?

実装 (test.c) の責任者は、x を含む別の構造体を宣言します。そして、「test_create」でいくつかのトリックを実行して、この構造を malloc します。

インターフェースと実装が完了したら。アプリケーション (main.c) は、x がどこにあるかを知らなくても x を設定/取得できます。

test.h

struct test_t
{
    int field1;
    int field2[0];
};

struct test_t *test_create();
void set_x(struct test_t *thiz, int x);
int get_x(struct test_t *thiz);

test.c

#include "test.h"
struct test_priv_t {
    int x;
};

struct test_t *test_create()
{
    return (struct test_t*)malloc(sizeof(struct test_t) + sizeof(struct test_priv_t);
}


void set_x(struct test_t *thiz, int x)
{
    struct test_priv_t *priv = (struct test_priv_t *)thiz->field2;
}

int get_x(struct test_t *thiz)
{
    struct test_priv_t *priv = (struct test_priv_t *)thiz->field2;
}

main.c

#include "test.h"

int main()
{
    struct test_t *test = test_create();
    set_x(test, 1);
    printf("%d\n", get_x(test));
}
于 2012-06-05T13:19:05.213 に答える