标签:
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); //最常见的方法
例子
1 /*从键盘输入一大堆字符串,统计A,B,C,D的出现次数,最后出现次数从高到低输出字母和出现次数*/ 2 #include <stdio.h> 3 4 struct test //定义结构体数 5 { 6 int p; //保存字符出现次数 7 char q; //保存字符种类 8 }; 9 struct test array[4]; 10 11 void paixu(struct test *b,int n);//调用定义的函数 12 13 int main() 14 { 15 16 int a,b,c,d; 17 a=b=c=d=0; //定义abcd四个整形变量,用于存储字符串出现次数,并进行初始化 18 char n[100]; 19 printf("输入字符串:\n"); 20 scanf("%s",n); //读取输入的字符串 21 22 for(int i=0;i<100;i++) //通过for循环计算a,b,c,d出现的次数 23 { 24 if(n[i]==‘a‘||n[i]==‘A‘) 25 { 26 a++; 27 } 28 29 else if(n[i]==‘b‘||n[i]==‘B‘) 30 { 31 b++; 32 } 33 else if(n[i]==‘c‘||n[i]==‘C‘) 34 { 35 36 c++; 37 } 38 else if(n[i]==‘d‘||n[i]==‘D‘) 39 { 40 d++; 41 } 42 43 } 44 //对结构体变量赋值 45 array[0].p=a;array[1].p=b;array[2].p=c;array[03].p=d; 46 array[0].q=‘a‘;array[1].q=‘b‘;array[2].q=‘c‘;array[3].q=‘d‘; 47 paixu(array,4);//调用排序函数 48 for(int l=0;l<4;l++)//循环输出显示 49 { 50 51 printf("%c出现次数为%d\n",array[l].q,array[l].p); 52 } 53 return 0; 54 } 55 56 57 58 void paixu(struct test *b,int n)//创建一个排序函数 59 { 60 int temp; //定义int类型变量,用于数值交换 61 char temp2; //定义char类型变量,用于字符交换 62 for(int i=0;i<n;i++) //for循环遍历 63 for(int j=0;j<n-i;j++) //将abcd进行降序排序 64 { 65 if (b[j].p<b[j+1].p) 66 { 67 temp=b[j].p; //如果前一个字符出现次数小于后一个进行交换 68 b[j].p=b[j+1].p; 69 b[j+1].p=temp; 70 temp2=b[j].q; //字符种类交换 71 b[j].q=b[j+1].q; 72 b[j+1].q=temp2; 73 74 } 75 76 } 77 78 }
标签:
原文地址:http://www.cnblogs.com/lxiaohei103/p/4338784.html