C语言复习:结构体
结构体专题
01、结构体类型定义及结构体变量定义
char c1,char c2, char name[62]; int age
char name[62]; int age,char c1,char c2
结构体变量的引用 :.
结构体变量的指针 :->
02、结构体做函数参数
结构体赋值编译器行为研究
结构体变量做函数参数 PK 结构体指针做函数参数
结构体做函数参数(//结构体赋值和实参形参赋值行为研究)
内存四区调用图画法
//从键盘获取数据,给结构体变量初始化,并排序,打印结构体
stack上分配结构数组和heap上分配结构体数组
03、结构体开发的常见模型及典型错误用法
结构体嵌套一级指针
结构体嵌套二级指针
04、结构体中的深拷贝/浅拷贝
问题抛出
解决方法
结构体类型定义及变量定义
|
/* 结构体类型定义及结构体变量定义;结构体是一种构造数据类型;用途:把不同类型的数据组合成一个整体-------自定义数据类型;结构体类型定义。 */ |
|
//声明一个结构体类型 struct _Teacher { char name[32]; char tile[32]; int age; char addr[128]; };
//定义结构体变量的方法 /* 1)定义类型 用类型定义变量 2)定义类型的同时,定义变量; 3)直接定义结构体变量; */
struct _Student { char name[32]; char tile[32]; int age; char addr[128]; }s1, s2; //定义类型的同时,定义变量;
struct { char name[32]; char tile[32]; int age; char addr[128]; }s3,s4; //直接定义结构体变量,匿名结构体
//初始化结构体变量的几种方法 //1) struct _Teacher t4 = {"name2", "tile2", 2, "addr2"}; //2) struct Dog1 { char name[32]; char tile[32]; int age; char addr[128]; }d5 = {"dog", "gongzhu", 1, "ddd"};
//3) struct { char name[32]; char tile[32]; int age; char addr[128]; }d6 = {"dog", "gongzhu", 1, "ddd"}; //结构体变量的引用 |
|
int { //struct _Teacher t1, t2; //定义同时初始化 { struct _Teacher t3 = {"name2", "tile2", 2, "addr2"}; printf("%s\n", t3.name); printf("%s\n", t3.tile); }
//用指针法和变量法分别操作结构体 { struct _Teacher t4; struct _Teacher *pTeacher = NULL; pTeacher = &t4;
strcpy(t4.name, "wangbaoming");
strcpy(pTeacher->addr, "ddddd");
printf("t4.name:%s\n", t4.name); }
printf("hello....\n"); getchar(); return } |
结构体做函数参数及结构体数组
|
//测试两个结构体变量之间可以copy数据吗? //t2 = t1; //测试实参传给形参,编译器的行为 |
|
//声明一个结构体类型 struct _MyTeacher { char name[32]; char tile[32]; int age; char addr[128]; };
void { printf("\nt.name:%s", t.name); }
void { printf("\nt->name:%s", t->name); } |
|
//结构体赋值和实参形参赋值行为研究 int { struct _MyTeacher t1, t2; memset(&t1, 0, sizeof(t1));
strcpy(t1.name, "name"); strcpy(t1.addr, "addr"); strcpy(t1.tile, "addr"); t1.age = 1;
//测试两个结构体变量之间可以copy数据吗? //t2 = t1; //测试实参传给形参,编译器的行为 //是可以的 printfMyteach01(t1);
printfMyteach02(&t1);
getchar(); return }
//定义结构体数组 int { int i = 0; struct _MyTeacher teaArray[3]; struct _MyTeacher *tmp = NULL; for (i=0; i<3; i++) { strcpy(teaArray[i].name, "aaaaa"); //printf("%s", teaArray[i].name); tmp = &teaArray[i]; printf("%s", tmp->name); } getchar(); return } |
例子
|
从键盘接受数据。。。。并排序 |
|
int { int i = 0; //打印 for (i=0; i<count; i++) { printf("\n教师名字:"); printf("%s", teaArray[i].name); printf("\n教师年龄:"); printf("%d", teaArray[i].age); }
} int { int i = 0, j = 0; struct _MyTeacher teaArray[3];
struct _MyTeacher tmp;
for (i=0; i<3; i++) { printf("\n请键入教师名字:"); scanf("%s", teaArray[i].name); printf("\n请键入教师年龄:"); scanf("%d", &teaArray[i].age); }
for (i=0; i<3; i++) { for (j=i+1; j<3; j++) { if (teaArray[i].age >teaArray[j].age) { tmp = teaArray[i]; teaArray[i] = teaArray[j]; teaArray[j] = tmp; } } }
//打印 for (i=0; i<3; i++) { printf("\n教师名字:"); printf("%s", teaArray[i].name); printf("\n教师年龄:"); printf("%d", teaArray[i].age); }
printf("ddddd\n"); printfArray(teaArray, 3);
system("pause");
} |
结构体在开发中的应用
|
//测试输入 //测试打印 //测试malloc //测试typdef用法 //定义结构体数组 |
|
struct _Student { char name[32]; char tile[32]; };
//声明一个结构体类型 struct _itTeacher { char name[32]; char tile[32]; int age; char addr[128]; };
struct _itAdvTeacher { char *name; char *tile; int age; char *addr; char *p1; char **p2; };
//测试输入 //测试打印 //测试malloc //测试typdef用法
//定义结构体数组 int { int i = 0; struct _itTeacher teaArray[3]; struct _itTeacher *tmp = NULL; for (i=0; i<3; i++) { strcpy(teaArray[i].name, "aaaaa"); //printf("%s", teaArray[i].name); tmp = &teaArray[i]; printf("%s", tmp->name); } getchar(); return } |
|
//内存四字节对齐 |
|
|
|
//结构体实参传给形参,也是一个值copy,相当于t1 = t2; //两个结构体变量之间确实是可以copy,这个是编译器的行为 |
C语言复习:结构体的更多相关文章
- C语言中结构体赋值问题的讨论
今天帮师姐调一个程序的BUG,师姐的程序中有个结构体直接赋值的语句,在我印象中结构体好像是不能直接赋值的,正如数组不能直接赋值那样,我怀疑这个地方有问题,但最后证明并不是这个问题.那么就总结一下C语言 ...
- C语言的结构体和C++结构体的区别
关于C++中声明结构体中需要使用构造器创建实例对象的语法: <C++的结构体构造方法的基本概念:结构体的构造方法需要和结构体的名字相同,并且无返回值,也不要void关键字,这样的方法就是构造器的 ...
- 01.C语言关于结构体的学习笔记
我对于学习的C语言的结构体做一个小的学习总结,总结如下: 结构体:structure 结构体是一种用户自己建立的数据类型,由不同类型数据组成的组合型的数据结构.在其他高级语言中称为记录(record) ...
- C语言中结构体对齐问题
C语言中结构体对齐问题 收藏 关于C语言中的结构体对齐问题 1,比如: struct{short a1;short a2;short a3;}A;struct{long a1;short a2;}B; ...
- 逆向知识第十四讲,(C语言完结)结构体在汇编中的表现形式
逆向知识第十四讲,(C语言完结)结构体在汇编中的表现形式 一丶了解什么是结构体,以及计算结构体成员的对其值以及总大小(类也是这样算) 结构体的特性 1.结构体(struct)是由一系列具有相同类型或不 ...
- C语言中结构体赋值问题的讨论(转载)
今天帮师姐调一个程序的BUG,师姐的程序中有个结构体直接赋值的语句,在我印象中结构体好像是不能直接赋值的,正如数组不能直接赋值那样,我怀疑这个地方有问题,但最后证明并不是这个问题.那么就总结一下C语言 ...
- go语言学习-结构体
结构体 go语言中的结构体,是一种复合类型,有一组属性构成,这些属性被称为字段.结构体也是值类型,可以使用new来创建. 定义: type name struct { field1 type1 fie ...
- 将c语言的结构体定义变成对应的golang语言的结构体定义,并将golang语言结构体变量的指针传递给c语言,cast C struct to Go struct
https://groups.google.com/forum/#!topic/golang-nuts/JkvR4dQy9t4 https://golang.org/misc/cgo/gmp/gmp. ...
- [日常] Go语言圣经--结构体,JSON习题
Go语言圣经-结构体 1.结构体是一种聚合的数据类型,是由零个或多个任意类型的值聚合成的实体 2.通常一行对应一个结构体成员,成员的名字在前类型在后,不过如果相邻的成员类型如果相同的话可以被合并到一行 ...
随机推荐
- 哈希表(Hash Table)原理及其实现
原理 介绍 哈希表(Hash table,也叫散列表), 是根据关键码值(Key value)而直接进行访问的数据结构.也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度.这个映 ...
- view之自定义控件
转载自:http://blog.163.com/ppy2790@126/blog/static/103242241201382210910473/ 开发自定义控件的步骤: 1.了解View的工作原理 ...
- [UE4]Cast to OverlaySlot、Set Vertical Alignment、Get Slot,解决Child Widget垂直居中对齐问题
- php安装imagemagick扩展 常见问题与解决方案(win平台)
1.写在前面 1-1.ImageMagick介绍 ImageMagick是一套功能强大.稳定而且开源的工具集和开发包,可以用来读.写和处理超过89种基本格式的图片文件,包括流行的TIFF.JPEG.G ...
- T-SQL 有参数存储过程的创建与执行
use StudentManager go if exists(select * from sysobjects where name='usp_ScoreQuery2') drop procedur ...
- 有关于Integer的一些小问题
先看一小段源码: Integer a1=; Integer a2=; Integer b1=); Integer b2=); Integer c1=; Integer c2=; System.out. ...
- (转)先装VS后装IIS产生问题的解决办法
原文地址:http://www.cnblogs.com/mytechblog/articles/1897682.html 基于.net的web程序设计asp.net,我们就必须安装VS和IIS,但这二 ...
- oracle执行update时卡死问题的解决办法
原因: 由于在PLSQL Developer执行update时没有commit,oracle将该条记录锁住了. 可以通过以下办法解决: 先查询锁定记录 Sql代码 SELECT s.sid, s.se ...
- Android被忽略的tools
自动生成的布局xml文件,很多都带有tools字样:但是大部分都被我们删除了: 其实它的作用是让我们这些开发者预览用的,十分的方便: 事例一个TextView: <TextView androi ...
- day5作业(基本数据类型字符串,列表)
#coding:utf-8'''默写99乘法标 金字塔 必做: 1.昨日选做题 博客中有 http://www.cnblogs.com/linhaifeng/articles/7133357.html ...
