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.通常一行对应一个结构体成员,成员的名字在前类型在后,不过如果相邻的成员类型如果相同的话可以被合并到一行 ...
随机推荐
- echo() print() printf() print_r() 的区别
echo是一个语言结构而非函数,因此它无法被变量函数调用, print和print_r是函数,语句没有返回值,函数可以有返回值(即便没有用) print() 只能打印出简单类型变量的值(如int ...
- 实现textview竖排文字效果
文字效果
- c#类的继承与包含的关系
基础例子 class Dept { private string name; private Emp emp; public string getName() { return this.name; ...
- (error) MOVED 5798 172.17.0.3:6379
登录没有启动集群模式(即缺少了那个"-c"): redis-cli -c -h yourhost -p yourpost
- Android7.0对dlopen的改变——读取私有.so结果变化
两个内存段 在同一个进程空间中dlopen一个.so文件,理论上在内存中是同一片区域,但实际调试中发现Android7.0(read "/proc/self/maps")中,先后读 ...
- mono_image_open_from_data_with_name原型
mono4.5 https://github.com/Unity-Technologies/mono 查看mono源码: //PATH: /mono/metadata/image.c MonoImag ...
- Spark2.0.0源码编译
Hive默认使用MapReduce作为执行引擎,即Hive on mr,Hive还可以使用Tez和Spark作为其执行引擎,分别为Hive on Tez和Hive on Spark.由于MapRedu ...
- sublime 打开import require 模块文件的url 或路径的插件
结果一番周折,终于发现sublime提供的一个插件(open url)可以实现打开import file 路径的文件,比如import demo from “../path” 的文件在新窗口或者新标签 ...
- “javac”不是内部或外部命令的解决办法(JDK1.5 ~ JDK10)
配置环境变量:计算机 -> 属性 -> 高级系统设置 -> 环境变量 JDK9以后版本(9-10): JAVA_HOME D:\Java\jdk-10 //jdk所在目录 JRE_H ...
- Java URLEncoder URLDecoder
URLDecoder 和 URLEncoder 用于完成普通字符串 和 application/x-www-form-urlencoded MIME 字符串之间的相互转换 URLDecoder类包含一 ...
