C语言学习---用指针指向二维字符串数组进行冒泡排序

注意行指针和列指针的使用

行指针不能直接访问二维数组的元素,必须要将行指针转换为列指针才能访问二位数组元素

易混淆的指针:

行指针:

p + i;

*(*(p + i));

*(*(p + i) + j);

&p[i];

(p + i) + j == p + i + j; 
列指针:

*(p + i);

*(p + i) + j;

*(p[i] + j);//p[i] + j为 元素p[i][j]的 地址

*(&p[i]);

源代码:


#pragma warning(disable:4996)
#include<stdio.h>
#include<string.h>
#define N 2
void paixu_printf(char (*p)[10])/*定义指向二维数组的指针,
								只能定义成指向一个包含10个元素的以为数组
								*即每次数组指针只能指向二维数组的一行*/
{
	char temp[11];/*一定不能定义为" *temp "
				  *因为temp需要储存字符串,且要能被改变*/
	int i, j;
	for (i = 0; i < N - 1; i++)/*第一层控制比较次数*/
	{
		for (j = 0; j < N - i - 1; j++)/*第二层则为冒泡排序*/
		{
			if (strcmp(*(&p[j]), *(p+j+1)) > 0)/*需要注意的是" p+j "是行指针,指向的是第二行
											 *要在前面加上 * ,转化为列指针,才能访问具体的元素
											 * *(p+j)等价于p[j]或p[j][0]*/
			{
				strcpy(temp, *(p + j));
				strcpy(*(p + j), *(p + j + 1));
				strcpy(*(p + j + 1), temp);
			}
		}
	}
	printf("排序结果:\n");
	for (i = 0; i < N; i++)
	{
		printf("%s\n", p + i);
	}
}
int main()
{
	char arry[N][10];
	int i;
	printf("请输入%d个字符串\n", N);
	for (i = 0; i < N; i++)
	{
		printf("请输入第%d个字符串:", i + 1);
		gets_s(arry[i]);
	}
	paixu_printf(arry);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值