|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 moc 于 2018-8-14 22:18 编辑
1、模型一
主调函数定义指针数组,如:char *ArrayStr[] = { "ccccc","aaaa", "bbbb", "11111"};被调函数形参采用二级指针接受,如char **ArrayStr。
注:上面指针数组初始化在Visual C++中会报错。
- #include "stdio.h"
- #include "stdlib.h"
- #include "string.h"
- // 打印函数
- int printArray(char **ArrayStr, int iNum)
- {
- int i;
- for (i = 0; i < iNum; i++)
- {
- printf("%s \n", ArrayStr[i]);
- }
- return 0;
- }
- // 排序函数
- int sortArrayStr(char **ArrayStr, int iNum)
- {
- int i = 0, j = 0;
- char *tmp;
- for (i = 0; i < 4; i++)
- {
- for (j = i+1; j<4; j++)
- {
- if (strcmp(ArrayStr[i], ArrayStr[j]) > 0)
- {
- tmp = ArrayStr[i];
- ArrayStr[i] = ArrayStr[j];
- ArrayStr[j] = tmp;
- }
- }
- }
- return 0;
- }
- int main()
- {
- char *ArrayStr[] = { "ccccc","aaaa", "bbbb", "11111"};
-
- printf("排序之前:\n");
- printArray(ArrayStr, 4);
-
- sortArrayStr(ArrayStr, 4);
-
- printf("\n排序之后:\n");
- printArray(ArrayStr, 4);
-
- system("pause");
- return 0;
- }
复制代码
2、模型二
主调函数定义二维数组,如:char myArray[10][30] = { "ccccc","aaaa", "bbbb", "11111"};被调函数形参采用二维数组接受,如char **ArrayStr。
- //打印
- int printfArray(char ArrayStr[10][30], int iNum)
- {
- int i;
- for (i = 0; i < iNum; i++)
- {
- printf("%s \n", ArrayStr[i]);
- }
- return 0;
- }
- // 排序函数
- int sortArrayStr(char myArray[10][30], int iNum)
- {
- int i = 0, j = 0;
- char buf[30];
- for (i = 0; i < iNum; i++)
- {
- for (j = i + 1; j<iNum; j++)
- {
- if (strcmp(myArray[i], myArray[j]) > 0)
- {
- strcpy(buf, myArray[i]);
- strcpy(myArray[i], myArray[j]);
- strcpy(myArray[j], buf);
- }
- }
- }
- return 0;
- }
- int main()
- {
- int i = 0, j = 0;
- char buf[30]; //buf数组名代表数组元素首地址
- //下面两种,内存模型不一样
- // char *ArrayStr[] = { "ccccc","aaaa", "bbbb", "11111"};
- char myArray[10][30] = { "cccc", "aaaa", "dddd", "11111" }; // 二维数组数组名代表什么
- printf("排序之前:\n");
- printfArray(myArray, 4);
- sortArrayStr(myArray, 4);
- printf("排序之后:\n");
- printfArray(myArray, 4);
- system("pause");
- return 0;
- }
复制代码
3、模型三
malloc 申请内存空间返回给二级指针,malloc 申请内存空间给数组,再用 二级指针做函数形参。
- int printfArr33(char **ArrayStr, int iNum)
- {
- int i = 0;
- for (i=0; i<iNum; i++)
- {
- printf("%s \n", ArrayStr[i]);
- }
- return 0;
- }
- int printfArr2_23(char myArray[10][100], int iNum)
- {
- int i = 0;
- for (i=0; i<iNum; i++)
- {
- printf("%s \n", myArray[i]);
- }
- return 0;
- }
- int sortArrayStr03(char **ArrayStr, int iNum)
- {
- int i = 0, j = 0;
- char *tmp = NULL;
- //排序
- for (i=0; i<iNum; i++)
- {
- for (j=i+1; j<iNum; j++)
- {
- if (strcmp(ArrayStr[i],ArrayStr[j]) < 0)
- {
- tmp = ArrayStr[i];
- ArrayStr[i] = ArrayStr[j];
- ArrayStr[j] = tmp;
- }
- }
- }
- return 0;
- }
- void main()
- {
- int i = 0, j = 0;
- char buf[100];
- char **myarray = (char **)malloc(10*sizeof(char*)); //int array[10]
- if (myarray == NULL)
- {
- return;
- }
- for (i=0; i<10; i++)
- {
- myarray[i] = (char *)malloc(100*sizeof(char)); //char buf[100];
- if (myarray[i] == NULL)
- {
- printf("ddddde\n");
- return;
- }
- sprintf(myarray[i],"%d%d%d ", i, i, i);
- }
- //第三种内存模型打印
- printf("排序之前\n");
- printfArr33(myarray, 10);
- //printfArr2_23(myarray, 10); //第二种打印不适合 err
- sortArrayStr03(myarray, 10);
- //第三种内存模型打印
- printf("排序之后\n");
- printfArr33(myarray, 10);
- for (i=0; i<10; i++)
- {
- free(myarray[i] );
- }
- if (myarray != NULL)
- {
- free(myarray);
- }
- system("pause");
- }
复制代码
注记:排序中,使用临时数组和临时指针效果是一样的,但含义不一样,使用指针是改变指向的顺序,使用数组是改变指针指向的内容。
|
|