c语言中的结构体

定义结构体变量

/* 结构体

自定义的一种类型称为构造类型,在C语言中称为结构体

定义结构体:

struct [结构体名]

{

[成员列表;]

};

定义结构体变量

1.struct 结构体名 变量名;

{


}


引用结构体成员 (运算符.)

结构体变量.成员


定义结构体变量并初始化

struct 结构体名 变量名={成员1初始化,成员2初始化....};

结构体与数组类似,定义之后不能直接整体赋值,不能直接整体引用


*/

#include <stdio.h>

#include <string.h>

int main(void)

{

struct student {

char name[20];//instance variables

int age;

char sex[10];

float score[4];

}; //结构体类型定义结束


//定义结构体变量

struct student tom;

// strcpy(tom.name,"tom");

// printf("姓名: %s\n",tom.name);

//定义结构体变量并初始化//

struct student jack={"jack",32,{56,67,78}};


printf("输入姓名:\n");

gets(tom.name);

printf("输入性别:\n");

gets(tom.sex);

printf("输入年龄:\n");

scanf("%d",&tom.age);

printf("输入分数:\n");

for (int i=0; i<4; i++)

{

scanf("%f",&tom.score[i]);


}

printf("姓名: %s\n",tom.name);

printf("性别: %s\n",tom.sex);

printf("年龄: %d\n",tom.age);

//遍历输出


for (int i=0; i<4; i++)

{

printf("分数: %f\n",tom.score[i]);

}

return0;

}



/*

1.定义结构体的同时定义结构体变量


struct [结构体名]

{


}


变量名[={初始化值}];


2.定义省略结构体

省略结构体名定义类型时必须在定义时指定所需的所有变量

struct

{


}name1,name2,name3[4];



*/

#include <stdio.h>

int main(void)

{


//定义结构体的同时定义结构体变量并赋初值

struct birthday {

int year;

int month;

int day;

}Bri={1990,10,4};

printf("出生日期为: %d %d %d \n",Bri.year,Bri.month,Bri.day);

return0;

}


/*

在结构体类型中使用其他的结构体类型定义结构体变量,需要先定义内部结构体变量的类型方可使用


*/

#include <stdio.h>

struct birthday {

int year;

int month;

int day;};

struct student {

char name[20];

struct birthday bir;

float score[4];

};


int main(void)

{

//结构体的初始化

struct student Alice={"Alice",{1990,10,4},{7,8,9,10}};

printf("%s: %d-%d-%d\n",Alice.name,Alice.bir.year,Alice.bir.month,Alice.bir.day);

int len =sizeof(Alice.score)/sizeof(Alice.score[0]);

for (int i=0; i<len; i++) {

printf("%f ",Alice.score[i]);

}

printf("\n");

return0;

}


结构体数组

/*

结构体数组

*/

#include <stdio.h>

struct birthday {

int year;

int month;

int day;

};

struct student {

char name[20];

struct birthday bir;

float score[4];

};

int main(void){

//定义结构体数组

struct student arr[3];

int len =sizeof(arr)/sizeof(arr[0]);

for (int i=0; i<len; i++) { scanf("%s:",arr[i].name);

scanf("%d-%d-%d",&arr[i].bir.year, &arr[i].bir.month, &arr[i].bir.day);

scanf("%f%f %f %f",&arr[i].score[0], &arr[i].score[1], &arr[i].score[2], &arr[i].score[3]);

}

printf("输出结果为:\n");

for (int i=0; i<len; i++) {

printf("%s ",arr[i].name);

printf("%d-%d-%d ",arr[i].bir.year, arr[i].bir.month, arr[i].bir.day);

printf("%f%f %f %f ",arr[i].score[0], arr[i].score[1], arr[i].score[2], arr[i].score[3]);

printf("\n");

}

printf("\n");

return0;

}


/*

结构体变量之间可以直接赋值

*/


/*

#include <stdio.h>

struct student{

char name[20];

int i;

};

int main(void){

struct student a={"hello",12};

struct student b;

b=a;

printf("b.name=%s b.i=%d\n",b.name,b.i);

return0;

}

*/

//交换结构体内容并输出


#include <stdio.h>

struct student{

char name[20];

int age;};

int main(void){

struct student temp;

struct student a={"hello tom",22};

struct student b={"hello jack",25};

temp=a;

a=b;

b=temp;

printf("b.name=%s b.age=%d\n",b.name,b.age);

printf("a.name=%s a.age=%d\n",a.name,a.age);

//结构体数组排序原理


/* for (int i=0; i<len-1; i++) {

min=i;

for (int j=i+1; j<len; j++) {

if (strcmp(arr[min].name,arr[j].name)>0) {

min=j;

}

}

t=arr[min];

arr[min]=arr[i];

arr[i]=t;

}

*/

return0;

}


结构体做函数参数,值是单项传递的

/*

结构体做函数参数,值是单项传递的

*/

#include <stdio.h>

#include <string.h>

struct student{

char name[20];

int age;

};

void output(struct student);

int main(void){

struct student a={"xioaming",25};

output(a);

printf("a:%s %d\n",a.name,a.age);

return0;

}

void output(struct student m){ printf("m:%s %d\n",m.name,m.age);

strcpy(m.name,"xiaohua");

}


指向结构体变量的指针变量

//指向结构体变量的指针变量 struct type *

//指针变量引用结构体成员运算符 ->

//引用成员的三种方法

1.a.i

2. p->i

3.(*p).i


#include <stdio.h>

struct type

{

int i;

};

void input(struct type *);

void output(struct type *arr,int len);

int main(void)

{

struct type a;

input(&a);

printf("a.i=%d\n",a.i);


//数组结构体

struct type arr[10]={{12},{22},{13},{34},{25},69,47,83,79,40};

output(arr,10);

return 0;

}

voidinput(structtype *p) //p=&a

{

// p->i =12;

//a.i (*p).i=33;

}

voidoutput(structtype *arr,intlen)

//struct type arr[]

{

for (inti=0; i<len;i++) {

printf("arr[%d]=%d\n",i,arr->i);

//arr[i].i

arr++;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值