Linux c開発-構造体

3409 ワード

実際のプロジェクト開発では,比較的複雑なデータ構造がある.たとえば、学生には、名前や年齢などの属性パラメータがあります.この時、伝統的なタイプを使うと、私たちのニーズを満たすことができません.C言語の構造体はこの問題を解決することができる.
1.構造体の定義
構造体はすべてキーワードstructによって定義されます.たとえば、学生の名前と年齢を含む構造体を定義します.
struct student {  
    char *username;  
    int age;  
}; 

structは構造体のキーワードです.studentは構造体の名前です.
2.構造体変数
構造体変数には、さまざまな方法で定義されます.
1.構造体上で直接定義します.この方式は比較的よく使われる.
//         
struct student {  
    char *username;  
    int age;  
} s1, s2; 

2.構造変数を直接説明します.この方法はstudentを省いて、このいくつかの変数だけがこの構造体を使うことができて、他の人は使用できません.
//         
struct {  
    char *username;  
    int age;  
} s1, s2;  

3.構造変数を説明する前に、構造タイプを定義します.
//         
struct student {  
    char *username;  
    int age;  
};
struct  student s1;
struct  student s2;

3.構造体における帯構造体
//        
struct date  {  
    int month;  
    int day;  
    int year;  
};   
struct student {  
    char *username;  
    int age;  
    struct date birthday;
};
struct  student s1;
まずdateの構造体を定義し、主に時間情報を格納するために使用します.
studentの構造体では、date構造体のパラメータを定義します.この場合,構造体には構造体があり,複雑なデータ構造タイプに適している.
4.構造体構造変数使用
構造体における構造変数は、一般に用いる.時です.{構造体変数名}.{構造変数}
例:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h> 
#include <string.h>

//         
struct student {  
    char *username;  
    int age;  
};


int main(void) {
    struct  student s1;
    s1.username = "test";
    s1.age = 100;
    printf("     :   %s     %d", s1.username, s1.age);
}

5.構造体変数の初期化
//   s1
struct student {  
    char *username;  
    int age;  
} s1 = {"test", 100};


int main(void) {
    printf("     :   %s     %d", s1.username, s1.age);
}

6.構造体配列
//   s1
struct student {  
    char *username;  
    int age;  
};

int main(void) {
    struct  student s1[2]; //         
    s1[0].username = "test";
    s1[0].age = 100;
    s1[1].username = "test2";
    s1[1].age = 200;
    printf("     :   %s     %d
", s1[0].username, s1[0].age); printf(" : %s %d", s1[1].username, s1[1].age); }

7.構造体ポインタ
#include <stdio.h>  
#include <stdlib.h>  
#include <unistd.h>  
#include <fcntl.h>   
#include <string.h>  
  
//           
struct student {    
    char *username;    
    int age;    
};    
  
int main(void) {  
    struct student *p = NULL; //           
    p = (struct student *) malloc(sizeof(struct student)); //         ,p          
    p->username = "zhuli";   
    p->age = 100;  
    printf("     :   %s     %d", p->username, p->age);  
} 

8.typedefを使用して構造体を定義する
typedefを使用して構造体を定義するメリットは、次のとおりです.
1.毎回structキーワードを書く必要はありません
2.よりイメージ的な表現データ構造タイプ
typedef struct student {  
    char *username;  
    int age;  
} STU;

int main(void) {  
    STU *p = NULL; //           
    p = (STU *) malloc(sizeof(STU)); //         ,p          
    p->username = "zhuli";   
    p->age = 100;  
    printf("     :   %s     %d", p->username, p->age);  
}