首页 > 代码库 > 结构和其他数据形式
结构和其他数据形式
结构体中关键词struct表示接下来的是一个结构
struct book{
...
}library;等同于struct book library;
初始化结构:struct book library = {
"the ...",
"dddd"
};
struct book gif = {
.value = http://www.mamicode.com/98.3,
3.4 //紧跟着value
};
数组是自动存储类,通常放在堆栈中。太大是把它变为静态的或外部的
#include<math.h>
double dummy = sin(0.0)
编译器装载浮点数版本scanf()
struct book library[5]; //声明结构数组
scanf()会把‘\n‘留在缓冲区,可用下面修正:
while(getchar!=‘\n‘)
continue;
struct guy fellow={
{
...
}
...
};
嵌套的初始化
指向结构的指针 struct guy * him;
一个结构的名字不是该结构的地址 him = &fellow[0]; 必须用&符号
指针用-> ,结构用.
结构作为参数时,会创建一个副本
允许将一个结构复制给另一个结构,(同一类型)
在结构中使用字符指针要给它分配存储区
复合文字: (struct book){...};
伸缩性数组成员:
struct flex
{
int count;
double average;
double scores[];
};
...
int n ;
struct flex *pf,*pf2;
n = 4;
pf = malloc(sizeof(struct flex) + n * sizeof(double));
p->count = n;
n = 7;
pf2 = malloc(sizeof(struct flex) + n * sizeof(double));
p->count = n;
...
把结构内容保存到文件中:
fprintf(book,"%s %s",primer.title,primer.author);指定%39s格式有利于字段结束和开始的位置
fwrite(&primer,sizeof(struct book),1,pbooks);
联合(union,与struct区别主要在于同时只有一个成员存在)、枚举(enum)、typedef
枚举的指定值与数组不同,数组没赋值默认为0,枚举向后递增
在同一作用域内,对一个变量和一个标记(结构标记,枚举~、联合~)C++因为放在同一个名字空间内会出错,而c不会
typedef给出的符号名称只限于对类型,解释由编译器,而不是预处理器执行
typedef char * STR;
#define STR char* 不同
typedef struct book{
...
}COM; //COM等同 struct book 与之前的定义声明合在一起不同
一个函数指针可以作为另一个函数的参数
可以拥有函数指针的数组
void (*pf)(char *);
结构和其他数据形式