C语言结构体学习系列之(二)
来源:互联网 发布:推荐淘宝女装质量好的 编辑:程序博客网 时间:2024/05/28 23:08
1,结构体做函数参数,应该注意的是,再被调用函数中改变结构体的值与普通变量的方法一样,不能直接定义两个普通形参接收,然后修改形参,这只是修改了形参的值,正确的方法是定义一个指针,然后把结构体地址传给指针,然后用指针进行修改。例:
void copyTeacher(T to, T from){ to = from;}void copyTeacher2(T *to, T *from){ //(*to) = (*from); *to = *from;}void main12(){ T tone = { "aaaa", 32, 02 }; T ttwo; //copyTeacher(ttwo, tone); //printf("copyTeacher()after \n"); //printf("ttwo.name = %s\n", ttwo.name); //printf("ttwo.age = %d", ttwo.age); copyTeacher2(&ttwo, &tone); printf("copyTeacher()after \n"); printf("ttwo.name = %s\n", ttwo.name); printf("ttwo.age = %d", ttwo.age); system("pause");}
我们可以看到,调用copyTeacher()函数最后打印的是一堆乱码,
而调用copyTeacher2()函数打印的是正确的。
2,结构体做函数参数的例程:
#define _CRT_SECURE_NO_WARNINGS #include <stdlib.h>#include <stdio.h>typedef struct Teacher{ char name[64]; int age; int id;}Teacher;void printTeacher(Teacher *Array, int num){ int i = 0; for (i = 0; i < num; i++) { printf("age:%d\n", Array[i].age); }}void sortTeacher(Teacher *Array, int num){ int i, j; Teacher tmp; for (i = 0; i < num; i++) { for (j = i + 1; j < num; j++) { if (Array[i].age>Array[j].age) { tmp = Array[i]; Array[i] = Array[j]; Array[j] = tmp; } } }}Teacher * createTeacher(int num){ Teacher *tmp = NULL; tmp = (Teacher *)malloc(sizeof(Teacher)*num); if (tmp == NULL) { return NULL; }}int createTeacher2(Teacher **p, int num){ Teacher *tmp = NULL; tmp = (Teacher *)malloc(sizeof(Teacher)*num); if (tmp == NULL) { return -1; } *p = tmp; //二级指针形参去间接修改 实参的值 return 0;}void FreeTeacher(Teacher *p){ if (p != NULL) { free(p); }}void main(){ int i = 0; //Teacher Array[3]; int num = 3; Teacher *pArray = NULL; createTeacher2(&pArray,num); if (pArray == NULL) { return; } for (i = 0; i < num; i++) { printf("\nplease enter age:"); scanf("%d", &(pArray[i].age)); } printTeacher(pArray, num); sortTeacher(pArray, num); printf("排序之后:\n"); printTeacher(pArray, num); free(pArray); pArray = NULL; system("pause");}
0 0
- C语言结构体学习系列之(二)
- C语言结构体学习系列之(一)
- C语言学习之结构体
- C语言学习之结构体struct
- C语言学习之结构体等
- C语言之结构体学习笔记
- C语言学习之结构体(一)
- C语言结构体(二)
- C语言笔记系列之十——结构体
- 杂记之C语言之结构(二)
- 【c语言问题系列教程之二】结构、联合和枚举
- C语言学习笔记系列(1)结构体的实际空间
- 深入学习C语言系列(二): #define与typedef
- 深入学习C语言系列(二): #define与typedef
- hdu2042 不容易系列之二(C语言)
- C语言系列(六)结构体和联合体
- C语言系列(六)结构体和联合体
- C语言系列(六)结构体和联合体
- 这是我的第一篇日志
- POJ 2485 Highways
- 黑马程序员---struts2学习笔记之八(ognl原理及使用)
- 脑机接口技术综述
- 设计模式--桥接模式
- C语言结构体学习系列之(二)
- 周赛 kmp
- 使用正则检测是否为中文
- Spring-MVC jsp导入excel到数据库
- UVa 753 A Plug for UNIX (多源多汇点+最大流+构图)
- Thinkphp 3.2 命令空间版使用PHPExcel导出数据
- select 用法
- 图片无限循环(手动和自动)
- 二叉查找树