大一的C语言课上老师讲过使用指针进行参数传递的方法,但其实比起使用指针来进行形参与实参的传递,使用传引用参数的方法能更简单的完成这一过程,可以缩短相当可观的代码长度也无需再定义指针。

首先是使用指针与自定义函数进行的参数传递:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include<bits/stdc++.h>
using namespace std;
void turn(int* ind);
void turn(int* ind) {
*ind = 114514;
}
int main() {
int ind, * p = NULL;
cin >> ind;
p = &ind;
turn(p);
cout << *p << endl;
return 0;
}

通过非常基础的指针运用就能完成参数传递,但是还需再定义一个与实参数据类型相同的指针。

然后是传引用参数的方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
#include<bits/stdc++.h>
using namespace std;
void turn(int &ind);
void turn(int &ind) {
ind = 114514;
}
int main() {
int ind;
cin >> ind;
turn(ind);
cout << ind << endl;
return 0;
}

显然通过传引用能更方便的完成参数传递。同时在传递string时如果使用指针寻址会出现很多的问题,指针的指向方式也与普通的char型数组有很大区别。所以此时使用引用类型的形参效果更好:
1
2
3
4
5
6
7
8
9
10
11
12
13
#include<bits/stdc++.h>
using namespace std;
void turn(string &ind);
void turn(string &ind) {
ind = "何励晗是傻逼";
}
int main() {
string ind;
cin >> ind;
turn(ind);
cout << ind << endl;
return 0;
}

2021.9.15更新使用二级指针来传递string类的方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include<bits/stdc++.h>
using namespace std;
void turn(const char** p,const char* mid);
void turn(const char** p, const char* mid) {
*p = mid;
cout << *p << " " << &(*p) << endl;
}
int main() {
string mid = "何励晗你妈死了";
string temp = "朱企平你妈死了";
const char* ind = NULL, * ind2 = NULL, * ind3 = NULL;
ind2 = mid.data();
ind3 = temp.data();
ind = ind2;
cout << ind2 << " " << &ind2 << endl;
//const char** tind = new const char*;
//*tind = &(*ind);
turn(&ind,ind3);
cout << ind << " " << &ind << endl;
//delete tind;
return 0;
}

PS.使用三个char*指针来传第一个string类型实属脑子有问题。自我查询闲的程度