二维指针做函数输入的三种内存模型
声明
这是听了网课后的总结,其实就是为了加深自身的印象。
1、指针数组
指针数组实质是数组,数组中的每个元素为指针。
// 指针数组
//对数组元素进行排序
char *sortArray(char **myArray. int num)//排序函数
{
int i = 0;
int j =0;
char *tmp = NULL;
for (i=0; i<num; i++)
{
for (j=i; j<num; j++)
{
if (strcmp(myArray[i],myArray[j])>0)//str1==str2返回0;str1<str2返回负数;str1>str2返回正数
{
tmp = myArray[i];
myArray[i] = myArray[j];
myArray[j] = tmp;
}
}
}
return *myArray;
}
void printArray(char**myArray, int num)//输出函数
{
int i = 0;
for (i = 0; i < num; i++)
{
printf("%s\n",myArray[i]);//或者 printf("%s\n",*(myArray+i));
}
}
void main()
{
int num = 0;
char *Array[]={"aaa", "111111", "bbbb", "ccccc"};
num = sizeof(Array) / sizeof(Array[0]);
sortArray(Array, num);
printArray(Array,num);
system("pause");
return ;
}
2、二维数组
void printArray1(char myArray[10][30], int num)//输出函数
{
int i = 0;
for (i = 0; i < num; i++)
{
printf("%s\n",*(myArray +i));//或者printf("%s\n", myArray[i]);
}
}
void sortArray1(char myArray[10][30], int num)
{
int i = 0;
int j = 0;
char mybuf[30];
for (i = 0; i < num; i++)
{
for (j = i+ 1; j < nmu; j++)
{
if (strcmp(myArray[i], myArray[j])>0)
{
strcpy(mybuf, myArray[i]);//用数组接需要用strcpy函数
strcpy(myArray[i], myArray[j]);
strcpy(myArray[j], mybuf);
}
}
}
}
void main()
{
int num = 4;
char Array[10][30] = {"aaa", "111111", "bbbb", "ccccc"};
sortArray1(Array,num);
printArray1(Array,num);
system("pause");
return ;
}
3、手动开辟空间
char **getmem(int num)
{
int i = 0;
char **p2 = NULL;
p2=(char **)malloc(sizeof(char *)*num);
for (i = 0;i < num; i++)
{
p2[i] = (char *)malloc(100*sizeof(char));//相当于char buf[100];
sprigf{p2[i], "%d%d%d",i + 1, i + 1, i + 1};
}
return p2;
}
void main()
{
int i = 0;
int j = 0;
char **p2 = NULL;
int num = 5;
char *tmp = NULL;
char tmpbuf[100];
p2 = getmem(num);
for (i = 0; i < num; i++)//排序
{
for (j = i+ 1; j < nmu; j++)
{
if (strcmp(myArray[i], myArray[j])>0)
{
strcpy(mybuf, myArray[i]);//用数组接需要用strcpy函数
strcpy(myArray[i], myArray[j]);
strcpy(myArray[j], mybuf);
}
}
}
//排序
printf("排序之后:\n");
for (i = 0; i < num; i++)
{
printf("%s\n", p2[i]);
}
//释放内存 释放顺序与定义分配内存的顺序相反
for (i = 0; i < num; i++)
{
if (p2[i] != NULL)
{
free (p2[i]);
}
}
if (p2 != NULL)
{
free (p2);
}
system("pause");
return ;
}