【C语言提高26】二级指针做输入的第三种内存模型:手工打造二维内存

来源:互联网 发布:js获取某个div的高度 编辑:程序博客网 时间:2024/04/29 21:44

打印  排序:

//自己打造内存空间void main(){int i = 0,j=0;char** p2 = NULL;char*tmp;char tmpbuf[100];int num = 5;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+1);//向内存空间中打印数据}//打印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(tmpbuf,p2[i]);strcmp(p2[i],p2[j]);strcmp(p2[j],tmpbuf);}}}//释放内存   先申请的后释放for (i = 0; i < num; i++){if (p2[i] != NULL){free(p2[i]);p2[i] = NULL;}}if (p2 != NULL){free(p2);p2 = NULL;}printf("\nhehhe");system("pause");return;}

封装成函数:

//产生molloc内存char**getMem(int num){int i = 0, j = 0;char** p2 = NULL;if (p2 == NULL){return NULL;}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 + 1);//向内存空间中打印数据}return p2;}//打印void printMyArray03(char**myArray, int num){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 + 1; j < num; j++){if (strcmp(myArray[i], myArray[j]) > 0)//前面的大  交换 {//交换的指针指向tmp = myArray[i];    //注意  交换的是数组元素   交换的是指针的值 //改变指针的指向myArray[i] = myArray[j];myArray[j] = tmp;}}}}//释放void getMem03_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);p2 = NULL;}}void main(){int i = 0, j = 0;char** p2 = NULL;char*tmp;char tmpbuf[100];int num = 5;p2 =getMem(num);//打印printMyArray03(p2,num);//排序//交换指针指向sortMyArray03(p2,num);         printMyArray03(p2, num);//释放内存   先申请的后释放getMem03_Free(p2,num);  //释放完后 实参main函数的p2还是一个野指针if (p2 != NULL){free(p2);p2 = NULL;}printf("\nhehhe");system("pause");return;}


0 0