第四天2017/03/31(下午2:结构体、数组)

来源:互联网 发布:重庆网络电视台 编辑:程序博客网 时间:2024/05/16 06:15
【作业】二级指针做输出(在被调函数中分配空间,主调函数中使用)//实现的目标:把两个字符数组作为输入,排好序保存到另外一个字符数组中。#include<iostream>using namespace std;char** sort(char Arr1[][10],int num1,char **Arr2,int num2){    int len = num1+num2;//在被调函数中定义变量Arr3,并分配内存空间,最后return返回给主函数main(即二级指针作输出)    char** Arr3 = (char **)malloc(sizeof(char*)*len); //定义Arr3,并分配内存空间    for(int l=0;l<len;l++)    {        Arr3[l] = (char*)malloc(sizeof(char)*100); //相当于动态分配len个数组        memset(Arr3[l],0,sizeof(char)*100);    }//把Arr1、Arr2拷贝给Arr3    int i=0;    int j=0;    for(i=0;i<num1;i++)    {        strcpy(Arr3[i],Arr1[i]);    }    for(j=0;j<num2;j++)    {        strcpy(Arr3[i+j],Arr2[j]);    }//对Arr3进行排序    for(int m=0;m<len;m++)    {        for(int n=m+1;n<len;n++)        {            if(strcmp(Arr3[m],Arr3[n])>0)            {                //交换(方法一:动态数组的strcpy)                //char ch[100] = {'\0'}; //静态分配内存空间                //strcpy(ch,Arr3[m]);                //strcpy(Arr3[m],Arr3[n]);                //strcpy(Arr3[n],ch);                //交换(方法二:Arr3[i]作为指针,指向字符串,对指针进行交换)                char *ch=NULL; //记得定义的时候进行初始化                ch = Arr3[m];                Arr3[m] = Arr3[n];                Arr3[n] = ch;            }        }    }    return Arr3;  //return返回给主函数main}void print_Arr(char **Arr3,int num){    for(int i=0;i<num;i++)    {        cout<<Arr3[i]<<endl;    }}void free_Arr(char** Arr,int num) //释放{    for(int i=0;i<num;i++)    {        if(Arr[i]!=NULL)        {            free(Arr[i]);            Arr[i]=NULL;        }    }    free(Arr);    Arr=NULL;}int main(){    char** Arr3 = NULL;    char Arr1[][10] = {"Cc","DD","AA","FF","BBB"};    char *Arr2[10] = {"QQQ","BBBB","HHHHH"};    Arr3 = sort(Arr1,5,Arr2,3);    print_Arr(Arr3,8);    free_Arr(Arr3,8);    getchar();}
1 0