C语言 函数实现字符串互换

Sup_lz:

你可以先学习一下函数的参数。

有个明确的概念“将参数传递给函数,函数得到的是参数值的一份拷贝”。也就是说,函数内部使用的参数和调用函数时传递的变量(实参)是两个完全独立的变量,只是函数内部使用的参数的值和实参一样而已。

错误示例:(使用直接交换指针的方式)

函数声明:void test_swap(char *test_str1, char *test_str2);

函数调用:test_swap(str1, str2);

分析:

如果在test_swap中实现了交换test_str1和test_str2,无法达到修改str1和str2的目的。的确在函数中test_str1和test_str2会被成功交换,但是test_str1并不是str1,它们在内存中都有各自的内存地址。且test_str1是函数的局部变量,一旦函数执行结束test_str1和test_str2就被释放掉了。所以函数执行结束后,str1和str2依然没有被交换。

正确示范:(使用指向指针的指针)

函数声明:void p_swap(char **p_str1, char **p_str2);

函数调用:p_swap(&str1, &str2);

分析:

我们像文章中那样,实现了交换p_str1和p_str2所指向的内存的值。同样的,p_str1和p_str2都是局部变量,函数运行完,就被释放掉。但是在p_swap函数中,p_str1指向str1,p_str2指向str2,我们修改了它们所指向的地址的值,也就是修改str1和str2的值,也就达到目的了。

总结,如果要通过函数修改一个变量的值,那么就要把参数设定为指向该变量的指针。函数实现时,需要改变参数所指向的地址的值。如果需要通过函数修改的值是一个指针,那么就函数的参数就应该申请为指向指针的指针,也就是二级指针。