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.通常一行对应一个结构体成员,成员的名字在前类型在后,不过如果相邻的成员类型如果相同的话可以被合并到一行 ...
随机推荐
- [UE4]非常实用的插值Lerp
Alpha的数值范围是0到1. if(Alpha==0) ReturnValue=A if(Alpha==1) ReturnValue=B 如果Alpha在0到1之间,Alpha值越接近0则ReVal ...
- header头参数不能带下划线
header头参数不能带下划线:game_id是错误的
- 第8章 传输层(2)_UDP协议
2. 用户数据报协议(UDP) 2.1 UDP的特点 (1)UDP是无连接的,即发送数据之前不需要建立连接,因此减少了开销和发送数据之前的时延. (2)UDP使用了尽最大努力交付,即不保证可靠交付,因 ...
- Java - 14 Java 日期时间
java.util包提供了Date类来封装当前的日期和时间. Date类提供两个构造函数来实例化Date对象. 第一个构造函数使用当前日期和时间来初始化对象. Date( ) 第二个构造函数接收一个参 ...
- 在windows server 2012/2016上,任务管理器性能页面增加磁盘监控的办法
从windows server 2012开始,微软修改了任务管理器的显示方式,图像化看起来更直观了,但是可惜的是,默认情况下,2012和2016均只显示CPU/内存/网络三个资源监视,没有重要的磁盘, ...
- String.prototype.normalize()
normalize() 方法会按照指定的一种 Unicode 正规形式将当前字符串正规化. 这是一个ES6方法. 许多欧洲语言有语调符号和重音符号.为了表示它们,Unicode 提供了两种方法.一种是 ...
- Spring配置,事务使用
1.spring redis session超时配置 <bean class="org.springframework.session.data.redis.config.annota ...
- Django的httprequest对象和httpresponse对象
请求一张页面时,Django把请求的metadata数据包装成一个HttpRequest对象,然后Django加载合适的view方法,把这个HttpRequest 对象作为第一个参数传给view方法. ...
- javascript继承之学习笔记
今天记录一下学习javascript的继承. 继承基本上是基于“类”来说的,而javascript中并不存在真正的类,所以就出现了各种模拟“类”的行为,然后就堂而皇之的使用起了类的概念.这里不谈“类” ...
- (转)日期类型的input元素设置默认值为当天
原文地址 html5的form元素对日期时间有丰富的支持 <input type="date"> <input type="time"> ...