C提高_day03_二级指针做输入第3种内存模型
#include <stdlib.h> #include <string.h> #include <stdio.h> void main() { int i = 0, j = 0; char **p2 = NULL; int num = 5; char *tmp = NULL; char tmpbuf[100]; //交换内存,必须申请一块buf p2 = (char **)malloc(sizeof(char *) * num); for (i=0; i<num; i++) { p2[i] = (char *)malloc(sizeof(char) * 100 ); //char buf[100]; sprintf(p2[i], "%d%d%d", i+1, i+1, i+2); } //排序之前 printf("排序之前\n"); for (i=0; i<num; i++) { printf("%s \n", p2[i]); } //排序 交换的是 :指针 /* for (i=0; i<num; i++) { for (j=i+1; j<num; j++) { if (strcmp( p2[i] , p2[j]) < 0) { tmp = p2[i]; p2[i] = p2[j]; p2[j] = tmp; } } } */ //排序 交换的时候内存 for (i=0; i<num; i++) { for (j=i+1; j<num; j++) { if (strcmp( p2[i] , p2[j]) < 0) // strcmp(s1,s1), s1=s2返回0;s1<s2返回负数;s1>s2返回正数 { strcpy(tmpbuf, p2[i]); strcpy( p2[i], p2[j]); strcpy( p2[j], tmpbuf); } } } //排序之前 printf("排序之后\n"); for (i=0; i<num; i++) { printf("%s \n", p2[i]); } //释放内存 for(i=0; i<num; i++) // 先释放一维的再释放molloc的 { if (p2[i] != NULL) { free(p2[i]); p2[i] = NULL; } } if (p2!=NULL) { free(p2); } printf("hello...\n"); system("pause"); return ; }
封装成函数:
#include <stdlib.h> #include <string.h> #include <stdio.h> char **getMem41(int num) { int i = 0; char **p2 = NULL; p2 = (char **)malloc(sizeof(char *) * num); if (p2 == NULL) { return NULL; } for (i=0; i<num; i++) { p2[i] = (char *)malloc(sizeof(char) * 100 ); //char buf[100]; sprintf(p2[i], "%d%d%d", i+1, i+1, i+1); } return p2; } void printMyArray03(char **myArray, int num) //第三种内存模型和第一种内存模型 p+1 是通用的 { int i = 0; for (i=0; i<num; i++) { //printf("%s \n", myArray[i]); printf("%s \n", *(myArray+i) ); } } void sortMyArray03(char **myArray, int num) { int i =0 , j = 0; char *tmp = NULL; //排序 for (i=0; i<num; i++) { for (j=i; j<num; j++) { if (strcmp(myArray[i], myArray[j]) < 0) { tmp = myArray[i]; //注意 交换的是数组元素 交换的是指针的值 //改变指针的指向 myArray[i] = myArray[j]; myArray[j] = tmp; } } } } void getMem41_Free(char **p2, int num) { int i = 0; //释放内存 for(i=0; i<num; i++) { if (p2[i] != NULL) { free(p2[i]); p2[i] = NULL; } } if (p2!=NULL) { free(p2); } } void main() { char **p2 = NULL; int num = 5; p2 = getMem41(num); //排序之前 printf("排序之前\n"); printMyArray03(p2, num); sortMyArray03(p2, num); //排序之后 printf("排序之后\n"); printMyArray03(p2, num); getMem41_Free(p2, num); //p2是一个野指针 printf("hello...\n"); system("pause"); return ; }
Stay hungry,Stay foolish