修改指针形参的注意要点!!!

原始函数版本

void swap(char *str1, char *str2)

{

char *temp = str1;

str1 = str2;

str2 = temp;

}

在这个版本中,str1str2 是函数参数,它们是传入的指针(即地址)的副本。这意味着:

  • 传递给 swap 函数的是指向字符的指针的副本。
  • 在函数内部,str1 和 str2 这两个指针会暂时持有原始字符数组的地址,但是对它们的修改(如将它们的地址更改到其他地方)不会影响调用者传入的实际指针。
  • 换句话说,原始调用者的指针所指向的地址并没有被改变,仅仅是在函数的局部范围内重定向了指针。

使用双重指针版本

void swap(char **str1, char **str2)

{

char *temp = *str1;

*str1 = *str2;

*str2 = temp;

}

在这个版本中,str1str2 是指向指针的指针,即双重指针。这意味着:

  • 传递给 swap 函数的是指向指针的指针的副本。
  • 这些双重指针所指向的实际上是真正的指针变量本身,而不仅仅是它们指向的字符串内容的地址。
  • 因为传递的是指针的地址,所以在函数内部通过 *str1 和 *str2 可以修改原始指针指向不同的字符串。
  • 实际上,这一修改影响到了调用者,因为它改变了原始指针变量的值,而不仅仅是它们所指向的内容。

因此,使用双重指针可以改变调用者指针本身的目标,而简单地使用单指针只能在函数范围内改变指向,但不会影响原始调用者的指针。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值