c语言学习笔记(10)——结构体
------------------------------------------------------------------
# include <stdio.h>
struct Student{ //Student可以看成一种数据类型
int age;
float score;
char sex;
};
int main(void){
struct Student st = {80,66.6,'F'};
return 0;
}
------------------------------------------------------------------
一、为什么需要结构体?
为了表示一些复杂的事物,而普通类型无法满足实际需求
二、什么叫结构体?
把一些基本类型组合在一起形成的一个新的复合数据类型叫做结构体。
三、如何定义一个结构体?
第一种方式
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语言学习笔记(10)——结构体的更多相关文章
- c语言学习笔记之结构体存储
今天讲讲结构体存储问题 首先,结构体简单说是对不同类型的封装,一开始我们可能会想结构体在内存中的存储的大小是直接元素的和 例如 我们可能会觉得是 结构体大小=int(4个字节)+ short(2个字节 ...
- C语言学习笔记--枚举&结构体
枚举 枚举是一种用户定义的数据类型,它用关键字enum以如下语法格式来声明: enum 枚举类型名字 {名字0,名字1,...,名字n}: 枚举类型名字通常并不真的使用,要用的是大括号里面的名字,因为 ...
- C语言学习笔记10-结构体、枚举、联合体
C语言学习笔记10-结构体.枚举.联合体 待传
- C#学习笔记之结构体
1.概述 结构是一种与类相似的数据类型,不过它较类更为轻量,一般适用于表示类似Point.Rectangle.Color的对象.基本上结构能办到的类全都能办到,但在某些情况下使用结构更为合适,后面会有 ...
- 《PHP7底层设计与源码实现》学习笔记2——结构体对齐
书里给了一段代码,假如有个结构体如下: struct test { char a; int b; long c; void* d; int e; cha ...
- contiki学习笔记---process结构体
process,字面意义,进程,看看它的结构 struct process { struct process *next; #if PROCESS_CONF_NO_PROCESS_NAMES #def ...
- Go语言学习笔记(10)——错误处理示例
// 定义一个 DivideError 结构 type DivideError struct { dividee int divider int } // 实现 `error` 接口 func (de ...
- 【C#学习笔记】结构体使用
using System; namespace ConsoleApplication { struct _st { public string name; public int age; } clas ...
- Go语言学习笔记十: 结构体
Go语言学习笔记十: 结构体 Go语言的结构体语法和C语言类似.而结构体这个概念就类似高级语言Java中的类. 结构体定义 结构体有两个关键字type和struct,中间夹着一个结构体名称.大括号里面 ...
- GO语言学习笔记(一)
GO语言学习笔记 1.数组切片slice:可动态增长的数组 2.错误处理流程关键字:defer panic recover 3.变量的初始化:以下效果一样 `var a int = 10` `var ...
随机推荐
- 关于Altium Designer中的搜索图纸上的元件
一开始以为Altium Designer搜索完成的pcb上的元件用ctrl+f 但是错了,应该是j,c
- 基于element ui的图片预览插件
写插件很简单,满足两个条件即可,一.基本的逻辑思路,二.熟悉插件语法要求.本次Vue插件也比较简单,点击“查看图片”用轮播的方式限制用户上传的图片,如图: 项目采用的是vue-element-admi ...
- 9.10 Binder系统_Java实现_hello服务
怎么做?2.1 定义接口: 写IHelloService.aidl文件, 上传, 编译, 得到IHelloService.java 里面有Stub : onTransact, 它会分辨收到数据然后调用 ...
- Android自定义组件系列【8】——遮罩文字动画
遮罩文字的动画我们在Flash中非常常见,作为Android的应用开发者你是否也想将这种动画做到你的应用中去呢?这一篇文章我们来看看如何自定义一个ImageView来实现让一张文字图片实现文字的遮罩闪 ...
- (三)RabbitMQ消息队列-Centos7下安装RabbitMQ3.6.1
原文:(三)RabbitMQ消息队列-Centos7下安装RabbitMQ3.6.1 如果你看过前两章对RabbitMQ已经有了一定了解,现在已经摩拳擦掌,来吧动手吧! 用什么系统 本文使用的是Cen ...
- ssl 内存泄露
http://i.mtime.com/chevalier/blog/1824652/ openssl内存分配 chevalier 发布于: 2009-04-20 10:31 openssl内存分配 ...
- 离线下载chrome
https://gallery.technet.microsoft.com/Google-Chrome-version-f0619a1f
- 走进windows编程的世界-----对话框、文本框、button
1 对话框的分类 2 对话框的基本使用方式 3 对话框资源 4 有模式对话框的使用 int DialogBox( HINSTANCE hInstance, LPCTSTR lpTemplate, ...
- php实现 简单密码(代码颜色变化)
php实现 简单密码(代码颜色变化) 一.总结 一句话总结:写代码的时候一定要关注代码的颜色变化,不然低级错误害死人.常量变量会有不同颜色,所以$str少$符号变成常量的时候很容易发现. 1.变量$ ...
- js课程 1-2 js概念
js课程 1-2 js概念 一.总结 一句话总结:js标签元素也是js对象,有属性和方法,方法就是事件,属性就是标签属性,可以直接调用. 1.js中如何获取标签对象? getElement获取的是标 ...