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

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的值,也就达到目的了。

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

相关推荐

高尔夫双门版叫什么
365彩票数据最专业

高尔夫双门版叫什么

📅 07-10 👁️ 7081
历史上的赊刀人,到底是有什么来头?
s365 2.2.3

历史上的赊刀人,到底是有什么来头?

📅 07-06 👁️ 5637
汉语修辞手法系列「什么是暗喻」
365彩票数据最专业

汉语修辞手法系列「什么是暗喻」

📅 07-20 👁️ 8508
传奇道士多少级能困住白野猪
365账号限制投注怎么办

传奇道士多少级能困住白野猪

📅 07-03 👁️ 4275
率土之滨武将经验书
365账号限制投注怎么办

率土之滨武将经验书

📅 07-20 👁️ 1004
小米4充电需要多长时间?
s365 2.2.3

小米4充电需要多长时间?

📅 07-01 👁️ 7145
金山软件 前二大股东1.雷军,持股比例12.9%;2. 腾讯 ,持股比例7.88%;总部位于北京市,目前每股31.7港元...
罐形规格对照表.pdf
365账号限制投注怎么办

罐形规格对照表.pdf

📅 07-18 👁️ 233
可定制!可交易!超稀有!【谪星】外观上线!