c总结8 --- 二级指针使用三种模型之一(二级指针1)


对于二级指针,常常会把自己绕晕了。二级指针,可以简单的理解为,就是一个二维数组。现在总结下二级指针的模型形式

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;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值