码迷,mamicode.com
首页 > 编程语言 > 详细

黑马程序员——c语言中结构体的使用以及注意事项和实际应用

时间:2015-03-15 22:41:36      阅读:288      评论:0      收藏:0      [点我收藏+]

标签:

 

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;

}

}

}

 

 

黑马程序员——c语言中结构体的使用以及注意事项和实际应用

标签:

原文地址:http://www.cnblogs.com/lxiaohei103/p/4340632.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!