• 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 }
  • 相关阅读:
    词义辨析:事件与事故
    术语-BPM:BPM
    职位:DBA
    职业-软件:软件测试工程师
    职位-软件工程师:软件工程师
    职业-IT:全栈工程师
    术语-技术栈:技术栈
    .NET Core:目录
    .NET Core:.Net Core 百科
    术语-抽象:抽象
  • 原文地址:https://www.cnblogs.com/spring-hailong/p/6111220.html
Copyright © 2020-2023  润新知