先说声抱歉,因为我不擅长解说长篇大论,如果还是不明白,请自行上网爬文
以你的代码有两点必须注意:
1.)首先以 C 语言为例:
你要先知道以下两种字符串的区别:
- char A[] = "ab";
- char *B = "ab";
复制代码
以上两种都能在 C 里正常运作,没有问题,但是在 C++ 11 里肯定报错,为什么呢?
C++ 11 报错:warning: ISO C++ forbids converting a string constant to ‘char*’
明显看出关键字 constant 吧?一个是能修改字符串,一个是不能修改的字符串。而 C++ 对于这点非常敏感,必须改写成:
- char A[] = "ab";
- char *B = (char*)"ab";
复制代码
2.)参数 &符
举例:
- #include <iostream>
- // using namespace std;
- void print_A(int x){
- std::cout << x << std::endl;
- }
- void print_B(int &x){
- std::cout << x << std::endl;
- }
- int main()
- {
- int num = 13;
- print_A(num);
- print_B(num);
- return 0;
- }
复制代码输出结果:
可以看出以上两点输出结果相同,那么为什么又要加个 & 符呢?
如图:第一点,附加 & 符表示只是用作参考,而不加 & 表示用作值。其它特征请自行百度查阅,这里不多讲
所谓参考参数就是可以直接修改参数值,比如:
- #include <iostream>
- // using namespace std;
- void A(int &x){ // &x 为参考参数
- x = 9999;
- }
- void B(int x){ // 一般参数
- x = 9999;
- }
- int main()
- {
- int a = 13, b = 7; // 声明与定义变量
-
- A(a); // 调用函数 A,a 值已经改变,此时 a = 9999
- B(b); // 调用函数 B,b 值没有改变,此时 b = 7(保持原样)
-
- std::cout << a << std::endl;
- std::cout << b << std::endl;
-
- return 0;
- }
复制代码输出结果:
可以看出,参考参数在函数内部做变动,会直接影响外部变量值。
针对以上两点,可以看出你的这个函数参数限制蛮多的:
1.)必须是常量字符串(不能做任何变动更改)
2.)参数作为参考参数(变动改变其值会直接影响函数外部变量值)