做网站需要服务器和什么软件/百度推广搜索排名
结构体和数组都是构造类型的一种.
作为函数参数形参时: 数组传递是原数组的地址, 结构体(结构体非const指针 除外)传的是实际的数值并给了新的变量.
数组中所有元素都是同一数据类型,结构体中的成员的数据类型可以相同也可不同.
1.结构体的一般定义
(一)
#include<stdio.h>int main()
{}//结构体定义
struct {//成员列表int num;char name[20];char sex;int age;float score;char addr[30]; }sudent1,student2; //变量名列表,定义结构体变量
(二)
#include<stdio.h>int main()
{}//结构体定义
struct student{//成员列表int num;char name[20];char sex;int age;float score;char addr[30]; }sudent1,student2; //变量名列表,定义结构体变量
(三)
#include<stdio.h>int main()
{}//结构体类型声明
struct student{//成员列表int num;char name[20];char sex;int age;float score;char addr[30]; }; //定义结构体类型变量
struct student student1;
struct student student2;
(四)
#include<stdio.h>int main()
{}struct date{int month;int day;int year;
};struct student{int num;char name[20];char sex;int age;struct date birthday;float score;char addr[30]; }; struct student student1;
struct student student2;
2.结构体变量的引用(结构体变量名.成员名)
#include<stdio.h>struct date{int month;int day;int year;
};
struct student{int num;char name[20];char sex;int age;struct date birthday;float score;char addr[30]; }; struct student student1;
struct student student2;int main()
{printf("%d \n",sizeof(struct student));//struct student长度student1.num=1;// "." 成员运算符,高运算优先级student1.birthday.year=1;printf("%d %d\n",student1.num,student1.birthday.year);
}
start without debugging
3.结构体变量地址
结构体变量的地址 和 本结构体变量的第一个成员地址相同(类似数组)
#include<stdio.h>struct date{int month;int day;int year;
};
struct student{int num;char name[20];char sex;int age;struct date birthday;float score;char addr[30]; }; struct student student1;
struct student student2;int main()
{student1.num=1;student1.birthday.year=1;printf("%d %d\n",&student1.num,&student1);
}
start without debugging
3.1结构体变量的初始化
#include<stdio.h>struct {int num;char name[20];}student1,student2={1,"xxx"};//结构体变量student2初始化int main()
{printf("%d %s \n",student2.num,student2.name);student1=student2;//结构体变量s...2赋值给结构体变量s..1printf("%d %s \n",student2.num,student2.name);
}
start without debugging
4. 结构体数组 定义
#include<stdio.h>struct {char name[10];char num[3];}person[2];//结构体数组 定义int main()
{int i;for(i=0;i<2;i++){puts("input name:");gets(person[i].name);puts("input num:");gets(person[i].num);}puts("\tname\t\t\t\t\tnum\n");for(i=0;i<2;i++){printf("%20s\t\t\t%20s\n",person[i].name,person[i].num);//%20s右对齐输出字符串,左边补空格,单行占20}
}
4.1 结构体数组定义并初始化
#include<stdio.h>struct {char name[10];char num[3];}person[2]={{"a","1"},{"b","2"}};//结构体数组定义时初始化int main()
{int i;puts("\tname\t\t\t\t\tnum\n");for(i=0;i<2;i++){printf("%20s\t\t\t%20s\n",person[i].name,person[i].num);}
}
5.结构体类型指针
#include<stdio.h>struct stu{char name[10];char num[3];}person={"a","1"};int main()
{struct stu *per;//定义结构体类型指针:指向结构体类型struct stuper=&person;//结构体变量地址赋值给指针puts("\tname\t\t\t\t\tnum\n");printf("%20s\t\t\t%20s\n",person.name,person.num);printf("%20s\t\t\t%20s\n",(*per).name,per->num);//两种方式,注意方式(*per).name中的括号必须要有,因为 . 运算符的运算优先级比 * 高//用指针引用变量中的成员}
6.结构体做函数参数
6.1结构体变量做函数参数
#include<stdio.h>
#include<string.h>struct stu{char name[5];int num;float score[2];
};int main()
{int print1(struct stu a);struct stu one;one.num=8;strcpy(one.name,"abc");//易错处one.score[0]=8;one.score[1]=9;print1(one);//结构体变量做实参
}int print1(struct stu a)//结构体变量做形参
{printf("%d \n",a.num);printf("%s \n",a.name);printf("%f %f \n",a.score[0],a.score[1]);
}
#include<stdio.h>struct stu{char *name;int num;float score[2];
};int main()
{int print1(struct stu a);struct stu one;one.num=8;one.name="abc";one.score[0]=8;one.score[1]=9;print1(one);//结构体变量做实参
}int print1(struct stu a)//结构体变量做形参
{printf("%d \n",a.num);printf("%s \n",a.name);printf("%f %f \n",a.score[0],a.score[1]);
}
6.2结构体类型指针做函数参数
#include<stdio.h>struct stu{char *name;int num;float score[2];
};int main()
{int print1(struct stu *a);struct stu one;one.num=8;one.name="abc";one.score[0]=8;one.score[1]=9;print1(&one);//结构体变量做实参
}int print1(struct stu *a)//结构体变量做形参
{printf("重新输入一个编号(int): ");scanf("%d",&a->num );//易错处printf("%d \n",a->num);printf("%s \n",(*a).name);printf("%f %f \n",(*a).score[0],a->score[1]);
}
7.名称优化
C语言: typedef 与 #define宏定义 .2021-06-08_慕容雪羽-CSDN博客