忙里偷闲( ˇˍˇ )闲里偷学【C语言篇】——(7)结构体
一、为什么需要结构体?
为了表示一些复杂的事物,而普通类型无法满足实际需求
二、什么叫结构体?
把一些基本类型组合在一起形成的一个新的复合数据类型叫做结构体。
三、如何定义一个结构体?
第一种方式:
struct Student{
int age;
float score;
char sex;
};第二种方式:
struct Student2{
int age;
float score;
char sex;
} str2;第三种方式:
strut {
int age;
float score;
char sex;
} str3;
四、怎么去使用结构体变量
1、赋值和初始化
定义的同时可以整体赋初值,如果定义完成后,则只能单个的赋初值
# include <stdio.h> struct Student
{
int age;
float score;
char sex;
}
int main(void){
struct Student st = {80, 66.6, 'F'}; //整体赋值
struct Student st2; //单个赋值
st2.age = 10;
st2.score = 88;
st2.sex = 'F'; printf("%d %f %c\n", st.age, st.score, st.sex); //第一种取值方式
printf("%d %f %c\n", st2.age, st2.score, st2.sex); return 0;
}2、如何取出结构体变量中每一个成员
(1)结构体变量名.成员名
(2)指针变量->成员名
# include <stdio.h> struct Student
{
int age;
float score;
char sex;
};
int main(void){
struct Student st = {40, 60, 'F'};
struct Student * pst = &st; pst->age = 68;
st.score = 66;
printf("%d %f\n", st.age, pst->score); return 0;
}pst->age在计算机内部会被转化成(*pst).age
3、结构体变量的运算
结构体变量不能相加,不能相减,也不能相互乘除但结构体变量可以相互赋值
struct Student
{
int age;
char sex;
char name[100];
}; //分号不能省略
struct Student st1, st2;
st1+st2 st1*st2 st1/st2 都是错误的
st1 = st2 或者 st2 = st1 都是正确的4.结构体变量和结构变量指针作为函数参数传递的问题
推荐使用结构体指针变量作为函数参数来传递
# include <stdio.h> struct Student
{
int age;
float score;
char sex;
}; int main(void){
struct Student st; InputStudent(&st); //对结构体变量输入
OutputStudent(&st); //对结构体变量输出 return 0;
}
void OutputStream(struct Student * ss){
printf("%d %c %s\n", ss->age, ss->sex, ss->name);
}
void InputStudent(struct Student * pstu){ //pstu只占4个字节
(*pstu).age = 10;
strcpy(pstu->name, "zhangsan");
pstu->sex = 'F';
}5.动态的构造存放学生信息的结构体数组
/*
2012年2月5日19:43:24
*/
# include <stdio.h>
# include <malloc.h> struct Student
{
int age;
float score;
char name[100];
};
int main(void){
int len;
struct Student * pArr;
int i; printf("请输入学生的个数:\n");
printf("len = ");
scanf("%d", &len);
pArr = (struct Student *)malloc(len * sizeof(struct Student)); for (i=0; i<len; ++i){
printf("请输入第%d个学生的信息\n", i+1);
printf("age = ");
scanf("%d", &pArr[i].age); printf("name =");
scanf("%s", pArr[i].name); printf("score = ");
scanf("%f", &pArr[i].score);
}
//输出
printf("\n\n\n");
for (i=0; i<len; ++i){
printf("第%d个学生的信息是\n", i+1);
printf("age = %d\n", pArr[i].age); printf("name = %s\n", pArr[i].name); printf("score = %f\n\n", pArr[i].score);
} return 0;
}输出结果:
请输入学生的个数:
len = 3
请输入第1个学生的信息
age = 22
name =李小强
score = 99
请输入第2个学生的信息
age = 23
name =杨鹏
score = 89
请输入第3个学生的信息
age = 24
name =王海涛
score = 88第1个学生的信息是
age = 22
name = 李小强
score = 99.000000
第2个学生的信息是
age = 23
name = 杨鹏
score = 89.000000
第3个学生的信息是
age = 24
name = 王海涛
score = 88.000000
忙里偷闲( ˇˍˇ )闲里偷学【C语言篇】——(7)结构体的更多相关文章
- 忙里偷闲( ˇˍˇ )闲里偷学【C语言篇】——(2)准备知识
一.变量为什么必须初始化? 在回答这个问题之前,我们先来运行一段代码: #include <stdio.h> int main(){ int i; printf("i=%d\n& ...
- 忙里偷闲( ˇˍˇ )闲里偷学【C语言篇】——(5)有趣的指针
一.指针是C语言的灵魂 # include <stdio.h> int main(){ int *p; //p是变量名,int *表示p变量存放的是int类型变量的地址,p是一个指针变量 ...
- 忙里偷闲( ˇˍˇ )闲里偷学【C语言篇】——(3)输入输出函数
一.基本的输入和输出函数的用法 1.printf() //屏幕输出 用法: (1)printf("字符串\n"); (2)printf("输出控制符", 输出 ...
- 忙里偷闲( ˇˍˇ )闲里偷学【C语言篇】——(1)GCC介绍及C语言编译过程
一.GCC基本介绍 GCC(GNU Compiler Collection,GNU编译器套装),是一套由GNU开发的编程语言编译器.它是一套以GPL及LGPL许可证所发布的自由软件,也是GNU计划的关 ...
- 忙里偷闲( ˇˍˇ )闲里偷学【C语言篇】——(9)链表
我们至少可以通过两种结构来存储数据 数组 1.需要一整块连续的存储空间,内存中可能没有 2.插入元素,删除元素效率极低. 3.查找数据快 链表 1.查找效率低 2.不需要一块连续的内存空间 3.插入删 ...
- 忙里偷闲( ˇˍˇ )闲里偷学【C语言篇】——(8)枚举、补码
一.枚举 # include <stdio.h> enum WeekDay //定义了一个数据类型(值只能写以下值) { MonDay, TuesDay, WednesDay, Thurs ...
- 忙里偷闲( ˇˍˇ )闲里偷学【C语言篇】——(6)动态内存分配
一.传统数组的缺点: 1.数组的长度必须事先定制,且只能是常整数,不能是变量 int len = 5; int a[len]; //error 2.传统形式定义的数组,该程序的内存程序员无法手动释放 ...
- 忙里偷闲( ˇˍˇ )闲里偷学【C语言篇】——(4)for == while ?
一.for和while等价替换 int i = 1; for (i; i<=100; i++){ sum = sum + 1; } int i = 1; while(i<=100){ su ...
- 闲里偷忙的CPU-某个kwoker进程忙
https://zhuanlan.zhihu.com/p/34311472 有一类比较特殊的CPU使用率问题,这类问题的特点是,系统平均CPU使用率很低,但是个别CPU的使用率非常高.今天借助这个真实 ...
随机推荐
- [USACO08JAN]电话线Telephone Lines(分层图)/洛谷P1948
这道题其实是分层图,但和裸的分层图不太一样.因为它只要求路径总权值为路径上最大一条路径的权值,但仔细考虑,这同时也满足一个贪心的性质,那就是当你每次用路径总权值小的方案来更新,那么可以保证新的路径权值 ...
- Spring MVC框架实例
Spring MVC 背景介绍 Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块.使用 Spring 可插入的 MVC 架构,能够选择是使用内置的 Spring Web 框架还是 ...
- web自动化测试 Selenium2 Java自动化测试实战9_3
driver.findElement(By.id("idInput")).sendKeys("哈哈"); driver.findElement(By.id(&q ...
- Java基础学习总结(38)——Lombok的使用和原理
一.项目背景 在写Java程序的时候经常会遇到如下情形: 新建了一个Class类,然后在其中设置了几个字段,最后还需要花费很多时间来建立getter和setter方法 lombok项目的产生就是为 ...
- 洛谷——P1548 棋盘问题
https://www.luogu.org/problem/show?pid=1548#sub 题目描述 设有一个N*M方格的棋盘(l<=N<=100,1<=M<=100)(3 ...
- [读书笔记]Java类载入过程
一. 类的生命周期 类从被载入到虚拟机内存中開始,到卸载出内存为止,有下面(如图)的生命周期: 以上"载入->验证->准备->解析->初始化"称为类的载入过 ...
- docker中发布springboot
http://note.youdao.com/noteshare?id=81a603b1b33731aaef7b7755c70f33fb
- ios根据字体大小设置
, , , , , , , , , , , }; //这么多字体,从大到小挨个尝试 ; UIFont *font; ; i < array_length; i++) { font = [font ...
- POJ3171 Cleaning Shifts DP,区间覆盖最值
题目大意.N个区间覆盖[T1,T2]及相应的代价S,求从区间M到E的所有覆盖的最小代价是多少. (1 <= N <= 10,000).(0 <= M <= E <= 86 ...
- Spring Boot初步认识
Spring Boot 来源及背后 Spring Boot开发始于 2013 年,伴随Spring4.0而生,2014 年 4 月发布 1.0.0 版本.当前版本1.4.0,http://projec ...