[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
# 다크서클 시인
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C 언어 구현 천둥 제거 게임 상세 정보먼저 작은 메뉴를 표시하고 게임을 할지 여부를 선택하십시오.사용자가 종료를 선택하면 프로그램 실행이 끝나고, 사용자가 게임을 선택하면 지뢰 제거 위치 좌표를 입력하라는 메시지가 표시됩니다.사용자가 입력한 좌표가 바둑...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.