[C 언어] 진급 | 구조 유형: 열거, 구조, 유형 정의

40354 단어 C 언어
---------------------------------------------------------------------
열거:
// main.c

#include <stdio.h>

const int red = 0;
const int yellow = 1;
const int green = 2;

int main(int argc, const char * argv[]) {
    /*
          :                    ;                
     */
    int color = -1;
    char *colorName = NULL;
    printf("");
    scanf("%d", &color);
    switch (color) {
        case red: colorName = "red"; break;
        case yellow: colorName = "yellow"; break;
        case green: colorName = "green"; break;
        default: colorName = "unknow"; break;
    }
    printf("   :%s
", colorName); return 0; }

 
// main.c

#include <stdio.h>

enum COLOR {RED, YELLOW, GREEN};

int main(int argc, const char * argv[]) {
    /*
       :           const int  
     */
    int color = -1;
    char *colorName = NULL;
    
    printf("");
    scanf("%d", &color);
    switch (color) {
        case RED: colorName = "red"; break;
        case YELLOW: colorName = "yellow"; break;
        case GREEN: colorName = "green"; break;
        default: colorName = "unknow"; break;
    }
    printf("   :%s", colorName);
    
    return 0;
}

 
// main.c

#include <stdio.h>

enum color {red, yellow, green};    //      color

void f(enum color c);               //f       color     

int main(int argc, const char * argv[]) {
    /*
                   ,    enum        :
        enum        {  0, ...,   n};
     
                    ,            ,          ,      int,    0 n。 :
        enum colors {red, yellow, green};
               ,red   0,yellow 1,green 2。
     
                     ,                  。
     */
    
    /*
             
     
             enum    
     
                            
     */
    
    enum color t = red; //t color     
    
    scanf("%d", &t);
    f(t);

    return 0;
}

void f(enum color c) {
    printf("%d
", c); }

 
//  main.c
#include <stdio.h> enum COLOR {RED, YELLOW, GREEN, NumCOLORS}; int main(int argc, const char * argv[]) { /* : ( :NumCOLORS) : enum COLOR {RED=1, YELLOW, GREEN = 5, NumCOLORS}; */ int color = -1; char *ColorNames[NumCOLORS] = { "red", "yellow", "green", }; char *colorName = NULL; printf(""); scanf("%d", &color); if (color >=0 && color < NumCOLORS) { colorName = ColorNames[color]; } else { colorName = "unknown"; } printf(" :%s
", colorName); /* , ; , const int ; (macro) , int 。 */ return 0; }

 
구조:
//  main.c
//  Created by weichen on 15/6/28.
//  Copyright (c) 2015  weichen. All rights reserved.
#include <stdio.h> // , ;. struct date { int month; int day; int year; }; int main(int argc, const char * argv[]) { /*
   - -
: , , , 。 1. , 。 2. , 。 3. , , 。 : 1. struct point { int x; int y; }; struct point p1,p2; // p1 p2 point x y ( )。 2. struct { int x; int y; } p1, p2; // p1 p2 , x y;p1 p2 , p1 p2, , ; 。 3. struct point { int x; int y; } p1, p2; // point , p1 p2, 。 : struct date today = {07, 31, 2014}; // struct date thismonth = {.month=7, .year=2014}; // . , 0 : , [] ,a[0] = 10; . ,today.day; student.firstName; p1.x; p1.y; : , , 、 , p1 = (struct point){5, 10}; // 5,10 point , p1, p1.x = 5; p1.y = 10; p1 = p2; // p1.x = p2.x; p1.y = p2.y; : , , & struct date *pDate = &today;
*/ /* today( struct date, today) struct date today; today.month = 06; today.day = 28; today.year = 2015; */ struct date today = {06, 28, 2015}; struct date thismonth = {.month=6, .year=2015}; struct date t; // t = (struct date){06, 28, 2015}; // struct date m; m = t; //m t , ,m t //m.year = 2016; m , t struct date *pDate = &today; printf("Today's date is %i-%i-%i
", today.year, today.month, today.day); //Today's date is 2015-6-28 printf("This month is %i-%i-%i
", thismonth.year, thismonth.month, thismonth.day); //This month is 2015-6-0 printf("t is %i-%i-%i
", t.year, t.month, t.day); //t is 2015-6-28 printf("m is %i-%i-%i
", m.year, m.month, m.day); //m is 2015-6-28 printf("%p", &pDate); //0x7fff5fbff7d8 return 0; }

 
//  main.c
//  Created by weichen on 15/6/29.
//  Copyright (c) 2015  weichen. All rights reserved.

#include <stdio.h>

struct point {
    int x;
    int y;
};

void getStruct(struct point);
struct point getStruct2(void);
void output(struct point);

int main(int argc, const char * argv[])
{
    /*
     -       -
     
             :
        int numberOfDays(struct date d);
        
                        
                        ,           
                 
                 
     
         :
                   scanf    (  %d  )
                  
            ->
                     ?
          C          
                 p main  y    
                  p     ,        main,  y  {0, 0}
     
         :
             ,          ,        ,        
                                ,     
                             
                ,               ,             
     
             :
                     ,                      
     
            :
        struct date {
            int month;
            int day;
            int year;
        } myday;    //    date       myday
     
        struct date *p = &myday;
        (*p).month = 12;    //    
        p->month = 12;      // ->                  
     
           :
     
        struct point* getStruct2(struct point *p)
        {
            scanf("%d", &(p->x));
            scanf("%d", &(p->y));
            return p;
        }
     
        void output(struct point p)
        {
            printf("%d, %d", p.x, p.y);
        }
     
        void print(const struct point *p)
        {
            printf("%d, %d", p->x, p->y);
        }
     
        void main()
        {
            struct point y = {0, 0};
            getStruct2(&y);
            output(y);
            output(*getStruct2(&y));
            printf(getStruct2(&y));
            getStruct(&y)->x = 0;
            *getStruct(&y) = (struct point){1, 2};
        }

     */
    
    struct point y = {0, 0};
    getStruct(y);
    output(y);      //0, 0         y " ",     ,   getStruct          ,    y
    
    y = getStruct2();   //          
    output(y);      //4, 5
    
    return 0;
}

void getStruct(struct point p)
{
    scanf("%d", &p.x);  //2
    scanf("%d", &p.y);  //3
    printf("%d, %d
", p.x, p.y); //2, 3 } struct point getStruct2(void) { struct point p; // scanf("%d", &p.x); //4 scanf("%d", &p.y); //5 printf("%d, %d
", p.x, p.y); //4, 5 return p; } void output(struct point p) { printf("%d, %d
", p.x, p.y); //0, 0 }

 
//  main.c
//  Created by weichen on 15/7/5.
//  Copyright (c) 2015  weichen. All rights reserved.

#include <stdio.h>

struct time {
    int hour;
    int minutes;
    int seconds;
};

struct time timeUpdate(struct time now);

int main(int argc, const char * argv[]) {
    /*
     -        -
     
         
        struct date dates[100]; //            
        struct date dates[] = { //      ,      struct
            {4,5,2005}, {2,4,2005}
        };
     
           
        struct dateAndTime {
            struct date sdate;
            struct time stime;
        };
     
          
        struct point {
            int x;
            int y;
        };
        struct rectangle {
            struct point pt1;
            struct point pt2;
        };
             :
            struct rectangle r;
            :
            r.pt1.x 、r.pt1.y, r.pt2.x   r.pt2.y
     
               :
            struct rectangle r.*rp;
            rp = &r;
                     :
            r.pt1.x         #    
            rp->pt1.x       #           
            (r.pt1).x       #     ,   
            (rp->pt1).x     #     ,   
            rp->pt1->x(  pt1    ),   :
     
                |--------------|
                |      |-----| |
            r . |pt1 . |x    | |
                |      |-----| |
            +-> |      |y    | |
            |   |      |-----| |
            |   |pt2 .  x      |
            |   |       y      |
            |   |--------------|
            |
            |   |--------------|
            rp  |             |
                |--------------|
     
             :
        struct point {
            int x;
            int y;
        };
        
        struct rectangle {
            struct point p1;
            struct point p2;
        }
     
        void printRect(struct rectangle r)
        {
            printf("<%d, %d> to <%d, %d>
", r.p1.x, r.p1.y, r.p2.x, r.p2.y); } int main(int argc, char const *argv[]) { int i; struct rectangle rects[] = { //2rectangles, 1,2 rects[0] pt1 x y,3,4 rects[0] pt2 x y {{1,2},{3,4}}, {{5,6},{7,8}} }; for (i=0; i<2; i++) { printRect(rects[i]); } }
*/ struct time testTimes[] = { {11,59,59}, {12,0,0}, {1,29,59}, {23,59,59}, {19,12,27} }; int i; for (i=0; i<5; i++) { printf("Time is %.2i:%.2i:%.2i
", testTimes[i].hour, testTimes[i].minutes, testTimes[i].seconds); testTimes[i] = timeUpdate(testTimes[i]); printf("one second later is %.2i:%.2i:%.2i
", testTimes[i].hour, testTimes[i].minutes, testTimes[i].seconds); } // sizeof , sizeof sizeof // , sizeof struct time ab = {1, 5, 7}; printf("%ld, %ld, %ld, %ld
", sizeof(ab), sizeof(ab.hour), sizeof(ab.minutes), sizeof(ab.seconds)); //12,4,4,4 printf("%p, %p, %p, %p, %ld
", &ab, &(ab.hour), &(ab.minutes), &(ab.seconds), (&(ab.minutes) - &(ab.hour))); //0x7fff5fbff798, 0x7fff5fbff798, 0x7fff5fbff79c, 0x7fff5fbff7a0, 1 return 0; } struct time timeUpdate(struct time now) { ++now.seconds; if (now.seconds == 60) { now.seconds = 0; ++now.minutes; if (now.minutes == 60) { now.minutes = 0; ++now.hour; if (now.hour == 24) { now.hour = 0; } } } return now; }

구조와 수조의 관계와 차이
원래 구조와 수조는 아무런 연관이 없다.FORTRAN은 수조라는 개념이 등장했고 구조는 Algol에서 등장했다. C++는 새로운 데이터 유형을 정의하는 주요 방식이 되기 시작했다.구조가 프로그래밍 언어에서 차지하는 지위는 사용자가 한데 모인 양을 정의하고 이 전체에 하나의 이름을 주기 위한 것이다.수조는 같은 유형의 데이터를 일련의 형식으로 표현할 수 있도록 하는 것이다.지금 C 언어를 벗어나 더 높은 높이에 서면 구조와 그룹을 어떻게 볼 수 있습니까?
 
유형 정의
//  main.c
//  Created by weichen on 15/7/6.
//  Copyright (c) 2015  weichen. All rights reserved.

#include <stdio.h>

int main(int argc, const char * argv[]) {
    /*
     -        (typedef) -
     
     C         typedef                   , :
        typedef int Length;         // Length  int     ,    int  
        typedef *char[10] Strings;  // Strings 10          ,10        
        typedef struct node {
            int data;
            struct node *next;
        } aNode;
        
          typedef struct node aNode; //    aNode     struct node
     
       ,Length         int                :
        Length a,b,len;
        Length numbers[10];
     
     Typedef
                 
                        
                     
     
            typedef long int64_t;   //          ,         ,      
            typedef struct ADate {  //  typedef                   
                int month;
                int day;
                int year;
            } Date;                 //         
     
            int64_t i = 1000000000;
            Date d = {9, 1, 2005};
     
     
            //    struct   Date (struct       ,              - Date)
            typedef struct {
                int month;
                int day;
                int year;
            } Date
     */
    
    typedef struct {
        int month;
        int day;
        int year;
    } Date;
    
    Date a = {1,2,3};
    printf("%ld,%ld,%ld", a.month, a.day, a.year);  //1,2,3
    
    return 0;
}

 
//  main.c
//  Created by weichen on 15/7/6.
//  Copyright (c) 2015  weichen. All rights reserved.

#include <stdio.h>

typedef union {
    int i;
    char ch[sizeof(int)];
} CHI;

int main(int argc, const char * argv[]) {
    /*
     -    -
     
      struct    
     
     union AnElt {
        int i;
        char c;
     } elt1, elt2;  //      int i     char c, sizeof(union ...) = sizeof(    )    
     
     elt1.i = 4;
     elt2.c = 'a';
     elt2.i = 0xDEADBEEF;
     
      struct     :
          
                       
                          
            union          
           
                      
                  /float/double       
     */
    
    CHI chi;
    int i;
    chi.i = 1234;
    for (i=0; i<sizeof(int); i++) {
        printf("%02hhX", chi.ch[i]);    //D2040000
    }
    printf("
"); return 0; }

 
Link: http://www.cnblogs.com/farwish/p/4604233.html
# 다크서클 시인

좋은 웹페이지 즐겨찾기