6

誰かが私にCの構造体のための非常に良いチュートリアルを提供できますか?

グーグル検索をしましたが、普通の情報を見つけました。詳細な構造を探しています。教えてください。

4

7 に答える 7

8

Brian W. Kernighan のチュートリアルをいつでも読むことができます。これは非常に優れています。「詳細」については、正確には何を意味しますか?結局のところ、構造はかなり単純です。上記のリンクは、一般的に発生する問題、typedef、構造体へのポインターなどをカバーしています。構造体についてまだ明確でない場合は、より具体的な質問を投稿してみてください。

于 2009-02-15T16:41:28.303 に答える
5

C (C++ ではない) の構造体で留意すべきことの 1 つは、次のように宣言するときに struct という単語を使用する必要があることです。

struct Point location;

このため、次のような typedef で宣言されていることがよくあります。

typedef struct tagPoint {
    int x;
    int y;
    } Point;

次に、他のタイプと同じようにポイントを宣言できます。

Point location;

この表記は、最初に見たときに混乱する可能性があります。

于 2009-02-15T16:52:41.300 に答える
3

私は通常、公式ガイドを使用するようにアドバイスします (常にアドバイスされていました)。ANSI C の場合、 K&R2ほど詳細公式のものはありません。

于 2009-02-15T17:19:07.837 に答える
1

構造体は基本的に、1 つまたは複数の変数の集合であり、異なる型の可能性があります。

図:

struct foo {
  int a;
  int b;
};
  • 構造体の変数名はmembersと呼ばれます。

編集:

構造体のメンバーは、次のように呼ばれます。

structure_variable.member
structure_pointer->member
(*structure_pointer).member    // Fiddly; use -> instead

例えば:

struct foo test;
struct foo *ptr = &test;
test.a = 1;
ptr->b = 2;

次のような他のこともできます。

  • 構造体へのポインター
  • 構造体の配列

ノート:

  • 構造体が非常に大きい場合は、構造体自体ではなく、構造体へのポインターを渡す方が効率的です。

素晴らしい本: C プログラミング言語、第 2 版 (Prentice Hall Software)

  • 優れた構造入門
于 2009-02-15T16:47:54.027 に答える
1

他の人がすでに言ったように、構造は単に変数のグループ化です。ターゲットによっては、低レベル関数 (ポインター演算を使用する fe) を介して要素にアクセスする場合、パディングまたはパッキングを考慮する必要がある場合があります。構造要素は通常、4 バイト境界 (32 ビット) で整列されます。したがって、異なるサイズの要素を含む構造にはパディングが必要になる場合があります

struct foo {
    int a;
    char b;
    int c;
    char d;
}

この例では (int が 4 バイト、char が 1 バイトであり、CPU が 32 ビット境界で整列していると仮定します) b、構造を整列させるために 3 バイト後にパディング バイトが必要です。その場合、構造を別の方法でソートする方が効率的です。これはメンバー名を変更しないため、使用法は変更されないことに注意してください。すべてのプロセッサが構造体メンバーを揃える必要があるわけではありませんが、スペースを節約できるパックされた構造体メンバーを使用すると、速度が低下する可能性があります。ただし、ほとんどの場合、これについて心配する必要はありません。

構造体の周りの typedef については、typedef と構造体に同じ名前を使用することもできます。つまり、次のようになります。

typedef struct foo {
  int a;
  int b;
} foo;

これにより、

struct foo variable;

また

foo variable;

型の変数を宣言するためstruct foo

私の観点からは、構造体をタイプ定義することは悪い考えです。これは、typedef (のようなfoo) が構造体であるという情報を隠し、キーワードを書くことstructは実際には追加の作業ではありません (特に、それらの typedef に接尾辞が追加されて表示される場合)それらは構造です-私はこれをかなり頻繁に見ました)。

編集typedef: 2番目の例で欠落を追加しました。

于 2009-02-15T21:31:45.983 に答える
0

Nick Parlante のリンクされたリスト リポジトリの素晴らしさに反論するのは困難です。

http://cslibrary.stanford.edu/

リンクされたリスト内で使用するための構造については、上記のリンクは無敵です。

構造体内で関数を使用する側面については説明しませんが、上記をタグ付けできれば、他のことは簡単です。

于 2013-03-13T12:16:34.423 に答える