//
// main.c
// 二级指针内存模型训练实例
//
// Created by Eric on 16/7/3.
// Copyright © 2016年 Eric. All rights reserved.
//
#include <stdio.h>
#include "stdlib.h"
#include "string.h"
int sortAllocMemory(char ** myArray1,int myArray1Num,char (*myArray2)[10],int myArray2Num,char ***sortArray,int *numCount){
int ret = 0;
int num = myArray1Num+myArray2Num;
char **array3 = (char **)malloc(sizeof(char*)*(num));
/**
* 先将数据 拷贝进 array3
*/
int i = 0,j = 0;
for (; i< myArray1Num; i++) {
//先分配内存
size_t len = strlen(myArray1[i])+1;//用来计算指定的字符串s 的长度,不包括结束字符"\0"。这里要加1
array3[i] = (char*)malloc(sizeof(char)*len);
//进行拷贝
strcpy(array3[i], myArray1[i]);
}
for(;j<myArray2Num;j++){
//先分配内存
size_t len = strlen(myArray2[j])+1;
array3[i+j] = (char*)malloc(sizeof(char )*len);
//进行拷贝
//printf("-myArray1-->%s",myArray1[j]);
strcpy(array3[i+j], myArray2[j]);
}
/**
* 全部进行排序
*/
char *tmp = NULL; //定义一个辅助指针变量
for (int i = 0; i<num; i++) {
for (int j = i+1; j<num; j++) {
if (strcmp(array3[i], array3[j])>0) {
tmp = array3[i];
array3[i] = array3[j];
array3[j] = tmp;
}
}
}
*sortArray = array3;
*numCount = num;
return ret;
}
//释放三级指针 再次打印 会报错
void sortfree(char ***p,int num){
char **myArray = *p;//转换成二级指针
if (p == NULL) {
return;
}
for(int i = 0; i < num;i++ ){
free(myArray[i]);
}
free(myArray);
*p = NULL; //间接赋值是指针存在的最大意义
}
//释放二级指针 再次打印 是乱码
void sortfree2(char **p,int num){
if (p == NULL) {
return;
}
for (int i = 0; i<num; i++) {
free(p[i]);
}
free(p);
}
void printArray(char **array,int num){
for (int i = 0; i<num; i++) {
printf("%s \n",array[i]);
}
}
int main(int argc, const char * argv[]) {
// insert code here...
printf("Hello, World!\n");
/**
* 主要是 将两个不同的二位数组模型 进行排序,放到两一个二维数组模型里面
*/
/**
* 定义一个二位数组模型
*/
char *arr1[] = {"77777","88888","66666"};
int arrNum = sizeof(arr1)/sizeof(arr1[0]);
printf("%d \n",arrNum);
/**
* 定义第二个二维数组模型
*/
char arr2[10][10] = {"aaaaa","eeeee","bbbbb"};
int arrNum2 = 3;
printf("%d \n",arrNum2);
// memset(arr2,1,sizeof(char)*arrNum2);//重置内存
// for (int i = 0; i<arrNum2; i++) {
// if (arr2[i][0] !='\0') {
// printf("%s \n",arr2[i]);
// }else{
// printf("---空\n");
// }
//
// }
/**
* 定义第三个二维数组 动态分配内存 用于存放排序后的数据
*/
char **arr3 = NULL;
int count = 0;
printf("--->%p\n",arr3);
sortAllocMemory(arr1, arrNum, arr2, arrNum2, &arr3,&count);
printf("count ----->%d\n",count);
printArray(arr3, count);
sortfree(&arr3, count);
// printArray(arr3, count);
return 0;
}
网友评论