C言語データ型まとめ

5569 ワード

一、基本データ型1.int 1>long int、long:8バイト%ld 2>short int、short:2バイト%d%i 3>unsigned int、unsigned:4バイト%zd 4>signed int、signed、int:4バイト%d%i
2.floatdouble 1>float:4バイト%f 2>double:8バイト%f
3.char 1>1バイト%c%d 2>charタイプメモリに保存されているASCII値'A'-->65
二、構造タイプ1.配列1>同じタイプのデータのみからなる2>定義:データ型配列名[要素数];
2.構造体1>異なるタイプのデータから構成することができる2>まずタイプを定義し、次にタイプ定義変数を利用する
三、ポインタタイプ1.変数の定義int*p;
2.間接操作変数の値int a=10;p = &a; *p = 20;
四、列挙タイプ使用の場合:1つの変数がいくつかの固定値しか許可されていない場合
変数の役割ドメイン
変数の役割ドメインによって
  • グローバル変数
  • 定義:関数の外側で定義された変数
  • 役割ドメイン:変数を定義する行からファイルの最後まで(後のすべての関数で共有できる)
  • ライフサイクル:プログラムが起動するとストレージスペースが割り当てられ、プログラムが終了すると
  • が破棄されます.
  • デフォルトの初期値は0
  • です.
  • ローカル変数
  • 定義:関数(コードブロック)内部で定義された変数(関数パラメータを含む)
  • 役割ドメイン:変数を定義する行からコードブロック終了
  • まで
  • ライフサイクル:変数を定義行から記憶領域の割り当てを開始し、コードブロックが終了すると
  • が回収される.
  • 固定初期値
  • なし
    #include 
    
    int age;
    
    void test()
    {
        int age;
        age = 10;
    }
    
    int main()
    {
        printf("%d
    ", age);// 0 int age = 20; printf("%d
    ", age);// 20 test(); printf("%d
    ", age);// 20 return 0; }

    こうぞうたい
    構造体を定義する方法手順
    //1.struct Person{//内の3つの変数を定義します.構造体のメンバーまたは属性int ageと呼ばれます.//年齢double height;//身長char*name;//名前};//2.構造体のタイプに応じて、構造体変数(ストレージスペースを実際に割り当てる)struct Personp={20,1.55,「jack」}を定義する.
    /*
       :              
     
        :              
     */
    #include 
    
    int main()
    {
        // 1.       
        struct Person
        { //    3   ,               
            int age; //   
            double height; //   
            char *name; //   
        };
        
        // 2.       ,       
        struct Person p = {20, 1.55, "jack"};
        p.age = 30;
        p.name = "rose";
        
        printf("age=%d, name=%s, height=%f
    ", p.age, p.name, p.height); /* struct Person p2; p2 = {30, 1.67, "jake"}; */ // , // 1 struct Person p2 = {.height = 1.78, .name="jim", .age=30}; // 2 p2.name = "jim"; p2.height = 1.78; p2.age = 25; return 0; }

    注意事項
    構造体のメモリ割り当ては、整列アルゴリズムに従います.すなわち、構造体が占有する記憶領域は、最大メンバーバイト数の倍数でなければなりません.
    struct Student
        {
            int age;// 4   
           char *name; // 8   
        };
        
        struct Student stu;
    //  char* 8  ,      ,   s   16 = 8*2   
     int s = sizeof(stu);
    

    構造体の3つの定義方法
  • 定義型定義変数
  •  // 1.  
         struct Student
         {
         int age;
         double height;
         char *name;
         };
         
         // 2.  
         struct Student stu = {20, 1.78, "jack"};
    
  • 型を定義するとともに変数
  • を定義する.
    //             ,1       2                 
     struct Student
         {
         int age;
         double height;
         char *name;
         } stu;
         
    
  • 構造体変数を定義第3の方式、匿名定義
  • struct {
            int age;
            char *name;
        } stu;
    

    構造体タイプの役割ドメイン
  • は関数の外側に定義されます.グローバル有効(定義タイプの行からファイルの最後まで)
  • は、関数(コードブロック)の内部で定義されます.ローカル有効(定義タイプの行からコードブロックの終了まで)
  • こうぞうたいはいれつ
    struct RankRecord
        {
            int no; //     4
            int score; //    4
            char *name; //    8
        };
    /*
        struct RankRecord r1 = {1, "jack", 5000};
        struct RankRecord r2 = {2, "jim", 500};
        struct RankRecord r3 = {3, "jake",300};
        */
     struct RankRecord records[3] =
        {
            {1, "jack", 5000},
            
            {2, "jim", 500},
            
            {3, "jake",300}
        };
        
        records[0].no = 4;
        //     
        //records[0] = {4, "rose", 9000};
    

    構造体へのポインタ
    /*
    1.           
     struct Student *p;
     
     2.            
     1> (*p).    
     2> p->    
    */
     struct Student
        {
            int no;
            int age;
        };
        //      
        struct Student stu = {1, 20};
        
        //     p    struct Student     
        struct Student *p;
        
        //     p   stu  
        p = &stu;
        
        p->age = 30;
     //      
        printf("age=%d, no=%d
    ", stu.age, stu.no); // printf("age=%d, no=%d
    ", (*p).age, (*p).no); // printf("age=%d, no=%d
    ", p->age, p->no);

    構造体と関数
    #include 
    struct Student
    {
        int age;
        int no;
    };
    
    //            ,                               
    //                         
    void test(struct Student s)
    {
        s.age = 30;
        s.no = 2;
    }
    
    //            
    void test2(struct Student *p)
    {
        p->age = 15;
        p->no = 2;
    
    }
    
    void test3(struct Student *p)
    {
        struct Student stu2 = {15, 2};
        p = &stu2;
        p->age = 16;
        p->no = 3;
    }
    
    int main()
    {
        struct Student stu = {28, 1};
        
        //test(stu);
        //test2(&stu);
        test3(&stu);
        
        printf("age=%d, no=%d
    ", stu.age, stu.no); return 0; }

    構造体のネスト
    #include 
    
    int main()
    {
        struct Date
        {
            int year;
            int month;
            int day;
        };
        
        
        //   
        struct Student
        {
            int no; //   
            
            struct Date birthday; //   
            
            struct Date ruxueDate; //     
            
            //         
            //struct Student stu;
        };    
        struct Student stu = {1, {2000, 9, 10}, {2012, 9, 10}};   
        printf("year=%d,month=%d,day=%d
    ", stu.birthday.year, stu.birthday.month, stu.birthday.day); return 0; }