值交换-----const常量,数字,字母,字符串

const常量,数组,字符串常量的值交换

	小伙伴们在刷题的时候,会大量遇到值交换的问题。常常让人摸不着头脑,因为不同的情况,方法不同。比如比较大小,顺序输出,排序等问题时都要用到。所以小编决定将这些“大脑阔”的问题理顺,不再让人感觉丈二和尚摸不着头脑。给小伙伴们送上“武功秘籍”。

const常量

		首先,告诉什么是const常量:const 修饰的变量成为常量 const 对象定义的时候必须赋值,也就是说const对象必须初始化。其值在程序运行的过程中不会发生改变,编译器会将其放在一个只读的内存区域,其值不能发生改变。 定义函数时,如果在函数体中不需要修改形式参数的值,建议将形式参数的值设为常量(const),以防用户不小心修改了这个值,会出现错误消息。
	举例如下:
const常量
const int a = 10;
int const a = 10;//const不管在前在后,两者等价(指针也如此)
int const b = 20;
a = 20;//error
b = 10;//error

const int* p1 = &a;//const在*之前,*为解引用取值,*p1为取值,即值不能变
const int *p2 = &b;//同上
p1 = &b;//ok
p2 = &a;//ok
*p1 = 100;//error,不能再赋值
*p2 = 200;//error同上

int* const p1 = &a;
int* const p2 = &b;
p1 = &b;//error,const在*之后,即指针为常量,指针取地址不能变。
p2 = &a;//error
*p1 = 300;//ok
p2 = 400;//ok

//const权限可以同等或者减少传递,但不能放大
int a = 10;
const int ca = 30;

int *p1 = &a;//ok
const int *p2 = &a;//ok
int *p3 = &ca;//error
const int *p4 = &ca;//ok
int *const p5 = &a;//ok
int *const p6 = &ca;//error

数组数字字母交换

		再者,交换数字或者字母。正序,倒序,从大到小,从小到大等等。
	举例如下:	123456->654321		
				"abcdfe"->"efdcba"   
				4562->2654
				形参传值交换

void Show(int *arr,int len)//交换数字,倒叙输出
{
	int i = 0;
	for(i;i < len;i++)
	{
		printf("%d",arr[i]);
	}
}
void Sawp(int *arr,int len)
{
	int tmp = 0;
	int i = 0;
	for(i;i < len/2;i++)
	{
		tmp = arr[i];
		arr[i] = arr[len-i-1];
		arr[len-i-1] = tmp;
	}
}

int main()
{
	int arr[10] = {0,1,2,3,4,5,6,7,8,9};
	int len = sizeof(arr)/sizeof(arr[0]);
	Sawp(arr,len);
	Show(arr,len);
	return 0;
}

字符数组与字符串常量的差异

1.char str1[10] = “abcde”;//字符数组
2.char *str2 = “abcde”;//字符串常量
3.const char *str3 = “abcde”;//等价2
str1[0] = ‘x’;//ok
str2[0] = ‘x’;//error程序崩溃
str3[0] = ‘x’;//error编译错误

指针传值示意图

在这里插入图片描述

形参传值交换

void Swap(int a,int b)交换不成功
{
	int tmp = 0;
	tmp = a;
	a = b;
	b = tmp;
		
}
void Swap(int *a,int *b)交换不成功
{
	int *tmp;/野指针
	*tmp = *a;
	*a = *b;
	*b = *tmp;		
}
void Swap(int *a,int *b)//只传递形参
{
	int *tmp;
	tmp = a;
	a = b;
	b = a;
}
void Swap(int *a,int *b)
{
	int tmp;
	tmp = *a;
	*a = *b;
	*b = tmp;
}
int main()
{
	int a = 5;
	int b = 9;
	int *p1 = &a;
	int *p2 = &b;
	if(a < b)
	{
		Swap(p1,p2);
	}
	printf("max = %d,min = %d\n",a,b);
	return 0;
}

运行结果
在这里插入图片描述

字符串交换

	最后,字符串交换,和数字不同,要调用字符串交换函数判断。

看实例:
#include<stdio.h>
#include<string.h>
void StrSort(char **str,int len)
{
	char * tmp;
	for(int i=0;i<len-1;i++)
	{
		for(int j=0;j+1<len-i;j++)
		{
			//if(str[j] > str[j+1])
			if(strcmp(str[j],str[j+1]) > 0)
			{
				tmp = str[j];
				str[j] = str[j+1];
				str[j+1] = tmp;
				//printf("%s\n",str[j]);
			}
		}
	}
}

void Show(char **str,int len)
{
	for(int i=0;i<len;i++)
	{
		printf("%s\n",str[i]);
	}
}


int main()
{
	char *str[5] = {"Hello","Nice",
					"to","meet","you",					
					};//指针数组
	StrSort(str,sizeof(str)/sizeof(str[0]));
	Show(str,sizeof(str)/sizeof(str[0]));
	return 0;
}

运行结果

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值