C结构和其他数据类型

1、结构声明和变量声明
struct name{};
struct name val;
列:
声明变量 
struct book library;
简化声明变量 
struct book {
  char title[100];
  char author[100];
  float value;
} library;
初始化结构体
struct book library = {
  "The Pious Pirate and the Devious Damsel",
  "Renee Vivotte",
  1.95
};
指定初始化器
    struct book surprise = { .value = 10.99};
2、联合(union)是一种数据类型,它能在同一个内存空间中储存不同的
数据类型(不是同时储存)。其典型的用法是,设计一种表以储存既无规
律、事先也不知道顺序的混合类型。
union hold {
  int digit;
  double bigfl;
  char letter;
};
上面联合储存一个int类型的值或一个double类型的
值或char类型的值
3、可以用枚举类型(enumerated type)声明符号名称来表示整型常量。使
用enum关键字,可以创建一个新"类型"并指定它可具有的值(实际上,enum
常量是int类型,因此,只要能使用int类型的地方就可以使用枚举类型)。
声明枚举 
enum spectrum {red, orange, yellow, green, blue, violet};
enum spectrum color;
因此,color可能的值是red、orange、yellow等。
这些符号常量被称为枚举符(enumerator)。然后,便可这样用:
int c;
color = blue;
if (color == yellow)
...;
for (color = red; color <= violet; color++)
在枚举声明中,可以为枚举常量指定整数值:
enum levels {low = 100, medium = 500, high = 2000};
4typedef工具是一个高级数据特性,利用typedef可以为某一类型自定义名
称。
typedef unsigned char BYTE;
随后,便可使用BYTE来定义变量:
BYTE x, y[10], * z;

还可以把typedef用于结构:
typedef struct complex {
float real;
float imag;
} COMPLEX;
然后便可使用COMPLEX类型代替complex结构来表示复数。使用typedef
的第1个原因是:为经常出现的类型创建一个方便、易识别的类型名

用typedef来命名一个结构类型时,可以省略该结构的标签:
typedef struct {double x; double y;} rect;
假设这样使用typedef定义的类型名:
rect r1 = {3.0, 6.0};
rect r2;
以上代码将被翻译成:
struct {double x; double y;} r1= {3.0, 6.0};
5、函数指针
void ToUpper(char *);// 把字符串中的字符转换成大写字符
void (*pf)(char *);// pf 是一个指向函数的指针
pf = ToUpper;//有效,ToUpper是该类型函数的地址
列:
void ToUpper(char *);
void ToLower(char *);
void (*pf)(char *);
char mis[] = "Nina Metier";
pf = ToUpper;
(*pf)(mis);//把ToUpper 作用于(语法1)
pf = ToLower;
pf(mis);//把ToLower 作用于(语法2)
函数做为参数
void show(void (* fp)(char *), char * str);
show(ToLower, mis);//show()使用ToLower()函数:fp = ToLower
show(pf, mis);//show()使用pf指向的函数: fp = pf
void show(void (* fp)(char *), char * str) {
(*fp)(str);//把所选函数作用于str
puts(str);//显示结果
}

猜你喜欢

转载自blog.csdn.net/ZWHSOUL/article/details/80782635