对于二级指针,常常会把自己绕晕了。二级指针,可以简单的理解为,就是一个二维数组。现在总结下二级指针的模型形式
1、第一种模型 char buf[10][30]= { "eeee", "ffff", "aas", "111","cccc" };
2、第二种模型 char *arr[] = {"dfe","sss","abc","eee"};
3、第三种模型 char **pArr = (char**)malloc(100 * sizeof(char*));
我们先来看第一种模型,看代码 :
int main()
{
int i = 0, j = 0;
char temp[30] = {0};//①
char buf[10][30] = { "eeee", "ffff", "aas", "111","cccc" };
int num = 4;
printf("排序之前打印\n");
for (i = 0; i < num; i++)
{
printf("%s \n", buf[i]);
}
for (i = 0; i < num; i++)
{
for (j = i + 1; j < num;j++)
{
if ( strcmp(buf[i],buf[j])>0)
{
strcpy_s(temp, sizeof(buf[i]), buf[i]); //②
strcpy_s(buf[i], sizeof(buf[i]), buf[j]);
strcpy_s(buf[j], sizeof(buf[i]), temp);
}
}
}
printf("排序之后打印\n");
for (i = 0; i < num; i++)
{
printf("%s \n", buf[i]);
}
system("pause");
return 0;
}
通过上面的代码,我们发现要使用这种模型的话,那么使用数据交换的时候,要定义一个buffer 例如:①, 在后面使用strcpy进行数据交换,如②。
上面的代码是在main函数中搞定的,那么作为参数,该如何写写呢?
代码如下:
/************************************************************************/
/* 函数名称:printArr
/* 函数功能:对二维数组中的元素进行打印
/* 参数1: 二维数组
/* 参数2: 数组元素个数
/* 返回值: 0正常 非0为不正常
/* 说明:
/************************************************************************/
//int printArr2(char pArr[10][30], int num)
int printArr2(char pArr[][30], int num)
{
//循环遍历的参数
int i = 0;
//结果返回值
int ret = 0;
if (pArr == NULL)
{
ret = -1;
printf("func printArr() 参数 pArr 不能为空 err:%d \n", ret);
return ret;
}
if (num <= 0)
{
ret = -2;
printf("func printArr() 参数 num 不能小于等于 err:%d \n", ret);
return ret;
}
for (i = 0; i < num; i++)
{
printf("%s \n", pArr[i]);
}
return ret;
}
/************************************************************************/
/* 函数名称:sortArr
/* 函数功能: 对二维数组中的元素进行排序
/* 参数1: 二维数组
/* 参数2: 数组元素个数
/* 返回值: 0正常 非0为不正常
/* 说明:
/************************************************************************/
int sortArr(char pArr[10][30], int num)
{
int i = 0, j = 0;
char tmp[30] = { 0 };
int ret = 0;
if (pArr == NULL)
{
ret = -1;
printf("func printArr() 参数 pArr 不能为空 err:%d \n", ret);
return ret;
}
for (i = 0; i < num; i++)
{
//因为要用第一个和后面一个比较 所有使用i+1即可
for (j = i + 1; j < num; j++)
{
if (strcmp(pArr[i], pArr[j]) > 0)
{
strcpy_s(tmp, sizeof(pArr[i]), pArr[i]);
strcpy_s(pArr[i], sizeof(pArr[i]), pArr[j]);
strcpy_s(pArr[j], sizeof(pArr[i]), tmp);
}
}
}
return ret;
}
int main()
{
int i = 0, j = 0;
char temp[30] = { 0 };
char buf[10][30] = { "eeee", "ffff", "aas", "111", "cccc" };
int num = 5;
printf("排序之前打印\n");
printArr2(buf, num);
sortArr(buf, num);
printf("排序之后打印\n");
printArr2(buf, num);
system("pause");
return 0;
}