1.结构体和数组的区别
①结构体:结构体可以由多个不同类型的数据构成,可以 包含int double等多种类型
②数组:数组则只能由多个相同类型数据构成
2.结构体的定义
①先定义结构体类型
struct Person { int age; //age height name 三个变量可以称之为结构体成员或者属性 double height; char*name; }
②根据结构体类型定义结构体变量
struct Person p={20,1.75,"tom"}; p.age=30; p.name="tim" //对结构体变量重新进行赋值
3.结构体内存分析
①
struct Person // 是定义结构体类型,并没有分配存储空间 { int age; double height; char*name; }
②struct Person p={20,1.75,"tom"}; //定义结构体变量才是真正分配存储空间
③结构体所占用的存储空间必须是最大成员字节数的倍数
int类型占用4个字节,char类型占用8个字节,而sizeof(Person)占用的是16个字节(8*2),而不是12个字节(8+4)
4.定义变量方式
①先定义类型,再定义变量,例如上面介绍的
②定义类型同时定义变量 例:
struct student { int age; char *name; }stu;
③定义类型同时定义变量
struct //类型无名称此定义方法不能重用 { int age; char *name; }stu;
5.指向结构体的指针
①定义: struct student *p;
②利用指针访问成员chengyuan
1>(*p)成员名称
2> p->成员名称
struct student { int age; int no; } //结构体变量 struct student stu=(20,1); //指针变量p将来指向struct student 类型的数据 struct student *p; //指针变量p指向stu变量 p=&stu; p->age=30;
输出的三种方式
Ⅰ printf("age=%,no=%d",stu.age,stu.no);
Ⅱprintf("age=%,no=%d",(*p).age,(*p).no);
Ⅲprintf("age=%,no=%d",p->age,p->no); //最常见的方法
例子
/*从键盘输入一大堆字符串,统计A,B,C,D的出现次数,最后出现次数从高到低输出字母和出现次数*/ #include <stdio.h> struct test //定义结构体数 { int p; //保存字符出现次数 char q; //保存字符种类 }; struct test array[4]; void paixu(struct test *b,int n);//调用定义的函数 int main() { int a,b,c,d; a=b=c=d=0; //定义abcd四个整形变量,用于存储字符串出现次数,并进行初始化 char n[100]; printf("输入字符串:\n"); scanf("%s",n); //读取输入的字符串 for(int i=0;i<100;i++) //通过for循环计算a,b,c,d出现的次数 { if(n[i]==‘a‘||n[i]==‘A‘) { a++; } else if(n[i]==‘b‘||n[i]==‘B‘) { b++; } else if(n[i]==‘c‘||n[i]==‘C‘) { c++; } else if(n[i]==‘d‘||n[i]==‘D‘) { d++; } } //对结构体变量赋值 array[0].p=a;array[1].p=b;array[2].p=c;array[03].p=d; array[0].q=‘a‘;array[1].q=‘b‘;array[2].q=‘c‘;array[3].q=‘d‘; paixu(array,4);//调用排序函数 for(int l=0;l<4;l++)//循环输出显示 { printf("%c出现次数为%d\n",array[l].q,array[l].p); } return 0; } void paixu(struct test *b,int n)//创建一个排序函数 { int temp; //定义int类型变量,用于数值交换 char temp2; //定义char类型变量,用于字符交换 for(int i=0;i<n;i++) //for循环遍历 for(int j=0;j<n-i;j++) //将abcd进行降序排序 { if (b[j].p<b[j+1].p) { temp=b[j].p; //如果前一个字符出现次数小于后一个进行交换 b[j].p=b[j+1].p; b[j+1].p=temp; temp2=b[j].q; //字符种类交换 b[j].q=b[j+1].q; b[j+1].q=temp2; } } }
时间: 2024-11-05 12:33:30