c/c++指针传参

首先要理解参数传递,参数传递分值传递,指针传递,引用传递。(就我自己理解,就是把实参对形参进行赋值)

值传递:

形参是实参的拷贝,改变形参的值并不会影响外部实参的值。从被调用函数的角度来说,值传递是单向的(实参->形参),参数的值只能传入,

不能传出。当函数内部需要修改参数,并且不希望这个改变影响调用者时,采用值传递。

指针传递:

形参为指向实参地址的指针,当对形参的指向操作时,就相当于对实参本身进行的操作

引用传递:

形参相当于是实参的“别名”,对形参的操作其实就是对实参的操作,在引用传递过程中,被调函数的形式参数虽然也作为局部变量在栈

中开辟了内存空间,但是这时存放的是由主调函数放进来的实参变量的地址。被调函数对形参的任何操作都被处理成间接寻址,即通过

栈中存放的地址访问主调函数中的实参变量。正因为如此,被调函数对形参做的任何操作都影响了主调函数中的实参变量。

//简单介绍参数传递,但是主要是指针传递的介绍

实例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

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月14日 上午12:21
下一篇 2023年2月14日 上午12:21

相关推荐