首页 > 技术文章 > c/c++指针传参

spring-hailong 2016-11-28 20:33 原文

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

值传递:

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

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

指针传递:

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

引用传递:

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

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

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

 

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

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

推荐阅读