C语言结构体学习系列之(二)
2015-08-08 15:15
260 查看
1,结构体做函数参数,应该注意的是,再被调用函数中改变结构体的值与普通变量的方法一样,不能直接定义两个普通形参接收,然后修改形参,这只是修改了形参的值,正确的方法是定义一个指针,然后把结构体地址传给指针,然后用指针进行修改。例:
我们可以看到,调用copyTeacher()函数最后打印的是一堆乱码,
而调用copyTeacher2()函数打印的是正确的。
2,结构体做函数参数的例程:
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"); }
相关文章推荐
- Lua和C语言的交互详解
- C#中结构体和字节数组转换实现
- 关于C语言中参数的传值问题
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C语言内存对齐实例详解
- c语言实现的带通配符匹配算法
- C语言实现顺序表基本操作汇总
- 探讨C语言的那些小秘密之断言
- C语言实现BMP转换JPG的方法
- 深入探讨C语言中局部变量与全局变量在内存中的存放位置
- C语言查找数组里数字重复次数的方法
- C语言泛型编程实例教程
- C语言中使用lex统计文本文件字符数
- C语言进制转换代码分享
- 基于C语言fflush()函数的使用详解
- C语言单链队列的表示与实现实例详解
- 关于C语言除0引发的思考
- 深入分析C中不安全的sprintf与strcpy
- Lua教程(四):在Lua中调用C语言、C++的函数