C语言指针的用法——Swap交换函数

Swap交换函数

父函数调用子函数,子函数如果想要修改父函数的值,必须传指针(地址),子函数内必须要解引用

子函数的改变要想影响到父函数,必须传指针,解引用

1.传指针:相当于走到房间门口,知道房间的确切位置。
2.解引用:相当于打开房门,这可以对房间内部进行改造。

  • 1 、未传指针

只在子函数中交换了a b的值,但对父函数无影响

void Swap_err1(int a,int b)//必须要传指针
{
	int tmp = a;
	a = b;
	b = tmp;
	//printf("%d,%d\n",a,b);//假象
}

在这里插入图片描述

  • 2、传指针但没有解引用

交换了p1、p2中保存的地址,但是只影响了地址,对值没影响。
因为主函数中打印 a b 的值时,a b中的值依旧为10 20;只不过是p1 p2中保存的地址发生改变

void Swap_err2(int *p1,int *p2)//传了指针,但是无意义。没有解引用,未跳入父函数中
{
	int *tmp = p1;
	p1 = p2;
	p2 = tmp;
}

在这里插入图片描述

  • 3、野指针,悬挂指针:你没有访问权限的地址(指针)

    有可能是不存在的地址,或者存在但是你不能访问。

void Swap_err3(int *p1,int *p2)
{
	int *tmp;//野指针,悬挂指针  局部变量,未初始化,随机值
	*tmp = *p1;
	*p1 = *p2;
	*p2 = *tmp;
}
  • 4、 既传指针且解引用

tmp保存p1的值 ,即tmp=10;
p1保存p2的值, 即
p1=20;
p2保存tmp的值, 即p2=10;
此时在主函数中,p1与p2地址中保存的数已交换。

void Swap(int *p1,int *p2)
{
	int tmp;
	tmp = *p1;
	*p1 = *p2;
	*p2 = tmp;
}

在这里插入图片描述

int main()
{
	int a = 10;
	int b = 20;
	Swap(&a,&b);
	printf("%d,%d\n",a,b);
	return  0;
}
  • 19
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 好的,这是一个用 C 语言实现的交换两个字符串的函数: ``` #include <stdio.h> #include <string.h> void swap_strings(char **str1, char **str2) { char *temp = *str1; *str1 = *str2; *str2 = temp; } int main() { char *str1 = "hello"; char *str2 = "world"; swap_strings(&str1, &str2); printf("str1 is now %s\n", str1); printf("str2 is now %s\n", str2); return 0; } ``` 这个函数接受两个参数:指向字符串的指针,然后使用一个临时变量来交换这两个字符串。 ### 回答2: 要实现C语言交换两个字符串的函数,我们可以使用指针来操作字符串。首先,声明一个函数,命名为swapStrings,接收两个字符串的指针作为参数。 函数实现思路如下: 1. 创建一个临时指针变量temp,用于存储一个字符串指针的值。 2. 将字符串a的指针赋值给temp。 3. 将字符串b的指针赋值给字符串a的指针。 4. 将temp的值赋值给字符串b的指针。 5. 交换完成。 具体代码实现如下: ```c void swapStrings(char** a, char** b) { char* temp; temp = *a; *a = *b; *b = temp; } ``` 这样,调用swapStrings函数并传入两个字符串的指针参数,即可实现两个字符串的交换。 注意:此函数交换了字符串的指针,而没有交换字符串的实际内容。如果需要交换字符串内容,可以使用strcpy函数来实现。 ### 回答3: C语言指针交换两个字符串的函数可以通过指针操作来实现。下面是一个示例代码: ```c #include <stdio.h> void swapStrings(char** str1, char** str2) { char* temp = *str1; *str1 = *str2; *str2 = temp; } int main() { char* str1 = "Hello"; char* str2 = "World"; printf("Before swapping: str1 = %s, str2 = %s\n", str1, str2); swapStrings(&str1, &str2); printf("After swapping: str1 = %s, str2 = %s\n", str1, str2); return 0; } ``` 这个函数`swapStrings`接受两个指向指针指针作为参数,并使用一个临时指针`temp`来保存`str1`指针所指向的值。然后,将`str1`指针指向`str2`指针所指向的值,将`str2`指针指向`temp`所指向的值,完成两个字符串的交换。 在`main`函数中,我们定义了两个字符串指针`str1`和`str2`,分别指向字符串常量"Hello"和"World"。然后,调用`swapStrings`函数交换这两个字符串,并打印出交换后的结果。 以上代码的输出结果为: ``` Before swapping: str1 = Hello, str2 = World After swapping: str1 = World, str2 = Hello ``` 可以看到,经过`swapStrings`函数的处理,两个字符串在`str1`和`str2`指针之间进行了交换

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值