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 }