C语言结构体的程序例程和应用

#include "stdio.h"
#include "assert.h"
#define NAME_LEN 20

/*
struct part{

}part1,part2; //part是结构体类型, part1和part2是part型结构体声明的变量

//新建变量时 struct part p1,p2;


typedef struct{

}part; //part是结构体类型

//新建变量时 part p1,p2;
*/



//结构变量: 当需要存储相关数据项集合时,结构是一种合理的选择
/*
声明
struct{
int number;//编号
char name[NAME_LEN+1]; //名称
int on_hand; //现有数量
} part1,part2 ; //建立两个这种类型的变量

结构体变量是在内存中顺序存储的

也可以在声明的时候初始化
struct{
int number;//编号
char name[NAME_LEN+1]; //名称
int on_hand; //现有数量
}
part1 = {678,"Disk drive0", 10},
part2 ={6,"Disk drive1", 17};

*/

#define N 10

struct part{
int number;//编号
char name[NAME_LEN+1]; //名称
int on_hand; //现有数量
};

void Example1(void);
void Example2(struct part part1);
//结构体函数的应用 结构体做实际参数

struct part Example3(int number, const char*name, int on_hand);
//结构体返回值,此时结构体成为函数的实际参数





int main()
{
struct part part1={2333, "zhikg", 777} ;
Example1();
printf("\n\nthis -------------------\n\n");
Example2(part1); //打印part1的值

printf("\n\nthis -------------------\n\n");
part1 = Example3(111, "zhisgk", 666); //修改 part1
Example2(part1); //打印part1的值





printf("\nHello world !\n");
return 0;
}




//结构体例程3 返回结构体

struct part Example3(int number, const char*name, int on_hand)
{
struct part p;
p.number = number;
p.on_hand=on_hand;
strcpy(p.name,name);
return p;
}



//结构体例程2 构建结构体
// 例程1中的问题是没有声明变量类型,所以在声明变量之前需要声明变量类型
/*

//----1----
struct part{
int number;//编号
char name[NAME_LEN+1]; //名称
int on_hand; //现有数量
} ; //注意后面的分号

//也可以直接声明变量类型的结构体中初始化
//----2----
struct part{
int number;//编号
char name[NAME_LEN+1]; //名称
int on_hand; //现有数量
}
part1 = {678,"Disk drive0", 10},
part2 ={6,"Disk drive1", 17};
//注意后面的分号
//----3----
struct part part1 = {678,"Disk drive0", 10};
struct part part2;
part2 = part1;

//作为声明结构标记的替换,还可以用typedef来定义真实的类型名
//----4----
typedef struct{
int number;//编号
char name[NAME_LEN+1]; //名称
int on_hand; //现有数量
} part; //注意类型的名字出现在末尾而不是开头

part part1,part2

*/


void Example2(struct part part1)
{
printf("Part1 number: %d\n",part1.number);
printf("Part1 name: %s\n",part1.name);
printf("Part1 number: %d\n",part1.on_hand);
}



//结构体例程1 初始化结构体
void Example1(void)
{
struct{
int number;//编号
char name[NAME_LEN+1]; //名称
int on_hand; //现有数量
}
part1 = {678,"Disk drive0", 10},
part2 ={6,"Disk drive1", 17};

printf("Part number: %d\n",part1.number);
printf("Part name: %s\n",part1.name);
printf("Part number: %d\n",part1.on_hand);

//结构体的值的修改
part1.number = 666;
part1.on_hand++;

printf("Part number: %d\n",part1.number);
printf("Part number: %d\n",part1.on_hand);


//结构体的赋值
printf("Part number: %d\n",part2.number);
printf("Part name: %s\n",part2.name);
printf("Part number: %d\n",part2.on_hand);
part2=part1;
printf("Part number: %d\n",part2.number);
printf("Part name: %s\n",part2.name);
printf("Part number: %d\n",part2.on_hand);
}

“`