C++

😄指针--作为参数进行传递

2019-05-23  本文已影响0人  JiehongYOU
内存地址 &
什么是指针 *

指针是一个变量,值为 另一个变量的内存地址
值:都是一个代表内存地址的长十六进制数

#include <stdlib.h>;
#include <iostream>;
using namespace std;

// 定义结构体 
typedef struct {
    int x;
    int y;
}Coor;

namespace test {

    void fun(int *a,int *b) {
        int c = 0;
        c = *a;
        *a = *b;
        *b = c;
    }

    void fun2(int& a, int& b) {
        int c = 0;
        c = a;
        a = b;
        b = c;
    }
}
// 指针方向
//类型 *&指针引用名 = 指针

// 只有别名,没有真实姓名
int main(void) {
    /*
    ------------------------------
    */
    // 定义基础类型
    int a = 3;

    // 进行引用:别名的操作,就是本身的操作
    int &b = a; 

    b = 33;

    cout << a << endl; // 输出的a:33
    /*
    ------------------------------
    */

    // 自定义结构体
    Coor c1;
    // 引用结构体
    Coor& c = c1;
    // 别名引用的操作:实际上是对其本身的操作
    c.x = 10;
    c.y = 20;

    cout << "c1.x :" << c1.x << "  c1.y" << c1.y << endl; // 输出的c1.x = 10 ; c1.y= 20

    /*
    ------------------------------
    */
    // 基础类型的定义
    int a2 = 10;
    // 指针是:引用的地址
    int *p = &a2;
    // 对p的操作:实际上是对a的操作
    *p = 1111;
    cout << "a2 : " << a2 << endl; // a2 进行了修改 = 1111

    // p 本来就是a2的值
    // 将p  的值,进行传递给q ,需要,进行数据类型的统一
    // q 为引用指针
    int *&q = p;
    // 对q的操作,是对p 的操作,实际是对 a2 的操作
    *q = 2222;
     // p是地址 并且 p 和 q 的值是相同的.
    // *p 取得是地址里边得值
    
    // 显示地址
    cout << "p:" << p << endl;
    cout << "q:" << q << endl;
    
    // 显示地址里边的内容
    cout << "p:" << *p << endl;
    cout << "q:" << *q << endl;
    cout <<"a2:"<< a2 << endl;  // a2 已经被修改为2222
    /*
    ------------------------------
    */
    // 参数调用
    int x = 10, y = 20;
    test::fun(&x, &y);
    test::fun2(x, y);
    cout << "exchange:" << "x:" << x << "y:" << y << endl;
    cout << "exchange-fun2:" << "x:" << x << "y:" << y << endl;

    // 引用传递
    // 定义引用
    int d = 10;
    int& f = d; // b 是a的别名
    f = 100;
    cout << d << endl;
    cout << f << endl;


    system("pause");
    return 0;

}
上一篇下一篇

猜你喜欢

热点阅读