首先要理解参数传递,参数传递分值传递,指针传递,引用传递。(就我自己理解,就是把实参对形参进行赋值)
值传递:
形参是实参的拷贝,改变形参的值并不会影响外部实参的值。从被调用函数的角度来说,值传递是单向的(实参->形参),参数的值只能传入,
不能传出。当函数内部需要修改参数,并且不希望这个改变影响调用者时,采用值传递。
指针传递:
形参为指向实参地址的指针,当对形参的指向操作时,就相当于对实参本身进行的操作
引用传递:
形参相当于是实参的“别名”,对形参的操作其实就是对实参的操作,在引用传递过程中,被调函数的形式参数虽然也作为局部变量在栈
中开辟了内存空间,但是这时存放的是由主调函数放进来的实参变量的地址。被调函数对形参的任何操作都被处理成间接寻址,即通过
栈中存放的地址访问主调函数中的实参变量。正因为如此,被调函数对形参做的任何操作都影响了主调函数中的实参变量。
//简单介绍参数传递,但是主要是指针传递的介绍
实例1:指针传递
1 #include<iostream>
2 using std::cout;
3 using std::endl;
4
5 class Simple{
6 private:
7 //一般用来定义私有变量
8 public:
9 void function(int *stu);//指针作为参数传递
10 };
11 void main()
12 {
13
14 Simple *simple=new Simple();
15 int value = 20;
16 int *pointer;
17 pointer = &value; //注意:不能直接对指针赋常量值,例 pointer=10(错),*pointer=10(错)
18 cout << &pointer << endl;//输出的是pointer的地址
19 cout << pointer << endl;//输出的是value的地址
20 cout << *pointer << endl;//输出的是value的值
21
22 //指针传参
23 simple->function(&value);//实参将值传给形参 stu=&value;//也可以simple->function(pointer);//结果一样
24 delete(simple);
25 system("pause");
26 }
27 void Simple::function(int *stu)
28 {
29
30 int *temp;
31 cout << (*stu) << endl;//输出传递的值,也就是value的值10
32 temp = stu;
33 cout << temp << endl;//输出的是value的地址
34 *temp = 30;
35 cout << (*temp) << endl;//输出的是值30
36
37 }
实例2:指针的指针传递
1 #include<iostream>
2 using std::cout;
3 using std::endl;
4
5 class Simple{
6 private:
7 //一般用来定义私有变量
8 public:
9 void function(int **stu);//指针作为参数传递
10 };
11 void main()
12 {
13
14 Simple *simple=new Simple();
15 int value = 20;
16 int *pointer;
17 int **temppointer;
18 pointer = &value; //注意:不能直接对指针赋常量值,例 pointer=10(错),*pointer=10(错)
19 temppointer = &pointer;//指针的指针
20
21 cout << &pointer << endl;//输出的是pointer的地址
22 cout << pointer << endl;//输出的是value的地址
23 cout << *pointer << endl;//输出的是value的值
24
25 cout << &temppointer << endl;//输出的是temppointer的地址
26 cout << temppointer << endl;//输出的是pointer的地址
27 cout << *temppointer << endl;//输出value的地址
28 cout << **temppointer << endl;//输出的是value的值
29 //指针传参
30 simple->function(&pointer);//实参将值传给形参 stu=&value;也可用//simple->function(temppointer);结果一样
31 delete(simple);32 system("pause"); }33 void Simple::function(int **stu)
34 {
35
36 int **temp;
37 cout << (**stu) << endl;//输出传递的值,也就是value的值10
38 temp = stu;
39 cout << temp << endl;//输出的是pointer的地址
40 **temp = 30;
41 cout << (*temp) << endl;//输出的是value的地址
42 cout << (**temp) << endl;//输出的是值30
43
44 }
原文链接: https://www.cnblogs.com/spring-hailong/p/6111220.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/244738
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!