结构体套用二级指针
2015-08-06 14:37
218 查看
1.结构体套用二级指针
2.内存模型
#define _CRT_SECURE_NO_WARNINGS #include <stdlib.h> #include <string.h> #include <stdio.h> /* "name1111" "name2222" "name3333" */ typedef struct Teacher { //char student[10][30] char name[64]; char *alisname; char **stuname; 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 sortTeacer(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 * createTeacher01(int num) { Teacher * tmp = NULL; tmp = (Teacher *)malloc(sizeof(Teacher) * num); // Teacher Array[3] if (tmp == NULL) { return NULL; } return tmp; // } int createTeacher02(Teacher **pT, int num) { int i = 0, j = 0; Teacher * tmp = NULL; tmp = (Teacher *)malloc(sizeof(Teacher) * num); // Teacher Array[3] if (tmp == NULL) { return -1; } memset(tmp, 0, sizeof(Teacher) * num); for (i=0; i<num; i++) { char **p = NULL; //malloc一级指针 tmp[i].alisname = (char *)malloc(60); //二级指针的第三种内存模型 p = (char **)malloc(3 * sizeof(char *)); //打造二维内存 for (j=0; j<3; j++) { p[j] = (char *)malloc(120); } tmp[i].stuname = p; // } *pT = tmp; //二级指针 形参 去间接的修改 实参 的值 return 0; // } void FreeTeacher(Teacher *p, int num) { int i = 0, j = 0; if (p == NULL) { return; } for (i=0; i<num; i++) { //释放一级指针 if (p[i].alisname != NULL) { free(p[i].alisname); } //释放二级指针 if (p[i].stuname != NULL) { char **myp = p[i].stuname; for (j=0; j<3; j++) { if (myp[j] != NULL) { free(myp[j]); } } free(myp); p[i].stuname = NULL; } } free(p); } void main() { int ret = 0; int i = 0, j = 0; //Teacher Array[3]; //在stack 分配内存 int num = 3; Teacher *pArray = NULL; ret = createTeacher02(&pArray, num); if (ret != 0) { printf("func createTeacher02() er:%d \n ", ret); return ; } for (i=0; i<num; i++) { printf("\nplease enter age:"); scanf("%d", & (pArray[i].age) ); //printf("\nplease enter name:"); //scanf("%s", pArray[i].name ); //向指针所指的内存空间copy数据 printf("\nplease enter alias:"); scanf("%s", pArray[i].alisname ); //向指针所指的内存空间copy数据 for (j=0; j<3; j++) { printf("please enter student name:"); scanf("%s",pArray[i].stuname[j] ); } } //打印老师年龄 // for (i=0; i<num; i++) // { // printf("age:%d \n", Array[i].age); // } printTeacher(pArray, num); sortTeacer(pArray, num); printf("排序之后\n"); printTeacher(pArray, num); FreeTeacher(pArray, num); printf("hello...\n"); system("pause"); return ; }
2.内存模型
相关文章推荐
- JavaScript常用语句
- 【暑期基础2】W HDU 2048 神、上帝以及老天爷(错排)
- Java并发专题 带返回结果的批量任务执行 CompletionService ExecutorService.invokeAll
- Mysql的DATE_FORMAT()应用
- 搞懂树状数组
- ios ViewController 页面跳转
- 选中table一格,实现整行高亮
- 246-基于TI DSP TMS320C6678、Altera FPGA的CPCI处理卡
- Spring HTTP Invoker-远程调用模式
- 一步一步教你实现Periscope点赞效果
- poj 2251 Dungeon Master
- UIWebView自适应宽度 截获html并修改便签内容
- 机器学习所需要的数学知识
- Android 版本更新功能的实现
- 辛格尔顿和Android
- iOS开发系列--C语言之构造类型
- python join 和 split
- HTML5的画布:Stroke(笔触)和Fill(填充)
- Linux完整备份工具 - dump, restore(现在基本不用这两个)
- WinDbg入门教程