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

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

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

黑马程序员--C语言中结构体-我之理解

------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------- 什么是结构体? “结构”是一种构造类型,它是由若干“成员”组成的.每一个成员可以是一个基本数据类型或者又是一个构造类型. 为什么要有结构类型? 结构体可以把功能相同的数据组织起来,存在一起,用的时候方便,而且在调用函数时,若 传递参数较多

黑马程序员---C语言基础---结构体

------iOS培训.Java培训.Android培训, iOS学习型技术博客,期待与您交流------ C语言基础---结构体 一.什么是结构体 介绍结构体之前,我想先简单介绍下数组.我想大家对数组都再熟悉不过了,顾名思义,数组就是将一些数据(元素)组合在一起,作为一个整体.使用数组需要注意的是这些元素必须是相同类型.而结构体和数组类似,也是将一些数据组合在一起作为一个整体,但是这些元素可以是不同类型.可以这么理解:结构体是更加灵活的数组,因为它允许元素是不同的类型. 实际生活中,如果我们要

黑马程序员--C语言中的结构体

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 结构(struct)      结构是由基本数据类型构成的.并用一个标识符来命名的各种变量的组合.  结构中可以使用不同的数据类型.      1. 结构说明和结构变量定义      在Turbo C中, 结构也是一种数据类型, 可以使用结构变量, 因此,  象其它  类型的变量一样, 在使用结构变量时要先对其定义.      定义结构变量的一般格式为:       struct 结构名   

黑马程序员-C学习日记-结构体

------- ios培训. android培训.java培训.期待与您交流! ---------- 一.局部变量与全局变量 1.局部变量:定义在函数内部的变量以及函数形参称为局部变量 作用域:从定义的那一行开始直到其所在的代码块结束 生命周期:从程序运行到定义那一行开始分配存储空间到程序离开该变量所在的作用域 特点:(1)相同作用域内不可以定义重名变量 (2)不同作用域可以定义重名变量,内部作用域变量可以覆盖外部作用域变量 2.全局变量:函数外部定义的变量 声明: 数据类型 变量名称 定义: 

黑马程序员— C语言选择结构和循环结构的总结

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 在学习完C语言的流程控制后,发现选择结构跟循环结构都各自有各自的特点,下面就来对选择结构与循环结构进行一个综合的总结 第一讲  选择结构与循环结构 选择结构主要包括if语句和switch语句,而循环结构包括for循环,while循环以及do while循环: 一 选择结构 1.if(条件){ }else if(条件2){ }else{ } 特点:同一时刻只有一个大括号里面的代码会执行. 2.s

黑马程序员--C语言中的指针(4)

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 使用字符串指针变量与字符数组的区别 用字符数组和字符指针变量都可实现字符串的存储和运算. 但是两者是有区别的.在使用时应注意以下几个问题: 1. 字符串指针变量本身是一个变量,用于存放字符串的首地址.而字符串本身是存放在以该首地址为首的一块连续的内存空间中并以‘/0’作为串的结束.字符数组是由于若干个数组元素组成的,它可用来存放整个字符串. 2. 对字符数组作初始化赋值,必须采用外部类型或静态

黑马程序员--C语言中的指针(5)

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 指针型函数 前面我们介绍过,所谓函数类型是指函数返回值的类型. 在C语言中允许一个函数的返回值是一个指针(即地址), 这种返回指针值的函数称为指针型函数. 定义指针型函数的一般形式为: 类型说明符 *函数名(形参表) { …… /*函数体*/ } 其中函数名之前加了“*”号表明这是一个指针型函数,即返回值是一个指针.类型说明符表示了返回的指针值所指向的数据类型. 如: int *ap(int 

黑马程序员--C语言中的指针(6)

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 本章小结 1. 指针是C语言中一个重要的组成部分,使用指针编程有以下优点: (1)提高程序的编译效率和执行速度. (2)通过指针可使用主调函数和被调函数之间共享变量或数据结构,便于实现双向数据通讯. (3)可以实现动态的存储分配. (4)便于表示各种数据结构,编写高质量的程序. 2. 指针的运算 (1)取地址运算符&:求变量的地址 (2)取内容运算符*:表示指针所指的变量 (3)赋值运算 ·把

黑马程序员--C语言中的指针(3)

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 指向多维数组的指针变量 本小节以二维数组为例介绍多维数组的指针变量. 一.多维数组地址的表示方法 设有整型二维数组a[3][4]如下: 0 1 2 3 4 5 6 7 8 9 10 11  设数组a的首地址为1000,各下标变量的首地址及其值如图所示.在第四章中介绍过, C语言允许把一个二维数组分解为多个一维数组来处理.因此数组a可分解为三个一维数组,即a[0],a[1],a[2].每一个一维