C言語学習:文字列、構造体、共用体

C言語では、文字列の実際に使用して  ヌル  文字を「\ 0」文字の1次元配列が終了しました。したがって、文字列が含まれている、NULLで終わる文字列。宣言し、初期化文字列を作成しました:

char charArrayName[capacity] = {charElement1,charElement2...}

実際には、あなたが必要としない  ヌル  文字列定数の末尾に文字を。ときにCコンパイラの配列の初期化、自動的に「\ 0」文字列の最後に。

C関数は、文字列(すぐ下の表に記載されていない)の多数を操作します。

いいえ。 ファンクション&目的
1 strcpyの(S1、S2);
文字列S2 S1に文字列をコピーします。
2 STRCAT(S1、S2)、
文字列の最後に接続文字列S1、S2。
3 STRLENは(S1)、
S1の文字列の長さを返します。
4 strcmp(S1、S2)、
S1、S2が同じである場合、0を返す、S1 <S2は、0が返され未満である場合に、S1> S2の場合は0が返されるよりも大きいです。
5 strchrは(S1、CH);
第CHを発生する第1の文字列s1の位置へのポインタを返します。
6 STRSTR(S1、S2)、
文字列の最初の出現のストリングS1、S2の位置を指すポインタを返します。

構造

でC 配列は同じタイプの変数は、データ項目が記憶できるように定義することができる構造が別のユーザ定義の、異なるタイプのデータ項目の格納を可能にするCプログラミングデータ型で利用可能です。

構造および構造体変数の宣言

構造体文が複数の部材を含む新しいデータ型を定義し、フォーマット構造体ステートメントです。

struct structTag { 
    type1 attrVarName;
    type2 attrVarName;
    ...
    typeN attrVarName;
} structVarName1,structVarName2,...,structVarNameN;

一般に、(属性定義部材)、objectvarNamei(インスタンス化された変数名(オブジェクト)); structTag(タグ構造(クラス名))、TYPEI attrVarName少なくとも3パート2であるように思われました。

次の例を宣言するには:

//此声明声明了拥有3个成员(整型的a,字符型的b和双精度的c)并且没有标明其标签的结构体,声明了结构体变量s1。
struct 
{
    int a;
    char b;
    double c;
} s1;
 
//此声明声明了拥有3个成员并且标签命名为SIMPLE的结构体,没有声明结构体变量
struct SIMPLE
{
    int a;
    char b;
    double c;
};
//用SIMPLE标签的结构体,另外声明了结构体变量t1、t2、t3
struct SIMPLE t1, t2[20], *t3;

 上記のステートメントの両方、およびS1 SIMPLEの構造体変数の宣言は、2つの完全に異なる種類があります。

我々はまた、typedefのキーワードを持つ新しいタイプを作成することができ、あなたはインスタンス変数のこのタイプを作成するために使用することができ、新しいタイプの名前のどの、よりシンプル作成、。例としては、次のとおりです:

typedef struct
{
    int a;
    char b;
    double c; 
} Simple2;
//现在可以用Simple2作为类型声明新的结构体变量
Simple2 u1, u2[20], *u3;

 構造体のメンバは、他の構造を含んでいてもよい、また指標の独自の種類を指す構造含んでいてもよいそのような木など、およびリンクリストの実装データ構造。

1.宣言は、他の構造を含みます

struct COMPLEX
{
    char string[100];
    struct SIMPLE a;
};
 

2.宣言は、独自のタイプを指すポインタを含みます 

struct NODE
{
    char string[100];
    struct NODE *next_node;
};

 前記構造は、2つの互いに含み、構造体の必要性を特徴と不完全文

struct B;    //对结构体B进行不完整声明
 
//结构体A中包含指向结构体B的指针
struct A
{
    struct B *partner;
    //other members;
};
 
//结构体B中包含指向结构体A的指针,在A声明完后,B也随之进行声明
struct B
{
    struct A *partner;
    //other members;
};

構造体変数の初期化

そして、他の種類の変数、初期値は構造体変数の定義に指定することができます。

アクセス構造体のメンバ

使用メンバアクセス演算子(。) 。アクセスオペレータがアクセスするアーキテクチャ及び我々の変数名の構造部材との間の期間のメンバーです。

関数のパラメータとして構造

構造体へのポインタ

ポインタポイントは、変数は、次のシンタックスの他の同様のタイプの実施形態に定義ポインタ点の構造を定義します。

//声明
struct structTag *structPointer;
//初始化
structPointer = &structVarName

使用して、ポインタの構造体へのポインタを行わなければならない構造体のメンバにアクセスするとき- >演算子。

//book为指向 Books类型的结构体变量book1 的 Books类型的结构体指针(指向变量的指针类型需和变量的类型相同)
void printBook( struct Books *book )
{
   printf( "Book title : %s\n", book->title);
   printf( "Book author : %s\n", book->author);
   printf( "Book subject : %s\n", book->subject);
   printf( "Book book_id : %d\n", book->book_id);
}
int main(){
    struct Books Book1;        /* 声明 Book1,类型为 Books */
    /* Book1 成员初始化 */
    //字符串成员变量使用strcpy初始化
    strcpy( Book1.title, "C Programming");
    strcpy( Book1.author, "Nuha Ali"); 
    strcpy( Book1.subject, "C Programming Tutorial");
    Book1.book_id = 6495407;

    printBook( &Book1 );
}

組合

組合は、異なるタイプのデータを格納するために同じメモリ位置にできるように、特殊なデータ・タイプです。複数の部材が、任意の時間値を持つメンバーの一つと共通のボディを定義することができます。

定義された組合

使用する  労働組合の  構造を定義するために同様の方法で、声明を。労働組合の文は、複数のメンバーと、新しいデータ型を定義します。次のようにUNION文の形式は次のとおりです。

union unionTag
{
   member definition;
   member definition;
   ...
   member definition;
} one or more unionVariables;

unionTag  、unionVariablesはオプションです。占有組合の組合メモリの最大のメンバーを格納するのに十分なものでなければなりません。

アクセス組合員

共通本体部材へのアクセスは、我々は、使用メンバアクセス演算子(。)。利用  組合は、  同じ方法及び構造体に、変数の一般的なタイプを定義するキーワード:

union unionTag unionVar

すべてのメンバーはよく前提出力は、組合員の初期化前に初期のメンバーがカバーされる一度だけ使用されることができます。

公開された161元の記事 ウォン称賛90 ビュー50000 +

おすすめ

転載: blog.csdn.net/qq_42415326/article/details/104027378