为了账号安全,请及时绑定邮箱和手机立即绑定

如果main函数用堆实例化一个对象,传参的时候为什么也要加上一个“*”?

#include <iostream>

using namespace std;


/**

 * 定义Coordinate类

 * 友元函数:display

 * 数据成员:m_iX、m_iY

 */

class Coordinate

{

    // 友元函数

    friend void display(Coordinate &coordinate);

public:

Coordinate(int x, int y)

{

m_iX = x;

m_iY = y;

}

public:

int m_iX;

int m_iY;

};


/**

 * display函数用于显示m_iX、m_iY的值

 */

void display(Coordinate &coordinate)

{

cout << "m_iX:" << coordinate.m_iX << endl;

cout << "m_iY:" << coordinate.m_iY << endl;

}


int main(void)

{

    // 实例化Coordinate对象

    Coordinate *coordinate = new Coordinate(1,2);

    // 调用display函数

    display(*coordinate);

    delete coordinate;

    coordinate = NULL;

return 0;

}

就比如这一段代码,在堆中实例化了一段空间,用指针指向它,但调用display的时候括号里的“*”代表了什么?


正在回答

4 回答

指针和引用都没搞清楚就跳到友元了??

0 回复 有任何疑惑可以回复我~

哈哈,要友善一点嘛,直接学c++怎么了

引用和指针参数传递其实就是abab的原则,

地址 a, 对象 b,要么a对a传递,要么b对b传递,

其中a对a传递为指针传递,传的是地址。

b对b传递为对象传递,传的是对象本身。

另外b对b传递还能用别名,给b取个名字b1,

对b1操作从而改变b,因为本质上b1和b是同一个对象

建议用指针或者引用,速度比较快

/*
友元函数 友元类
*/
#include<cstdio>
#include<iostream>
using namespace std;
class coor{
    friend void display1(coor &c);
    friend void display2(coor c);
    friend void display3(coor *c);
public:
    coor(int x,int y){
      m_iX = x;
      m_iY = y;
    }
    ~coor(){}
private:
    int m_iX;
    int m_iY;
};
//void display1(coor &co);
//void display2(coor co);
//void display3(coor *co);
int main(){
    coor c1(3,5); //从堆中实例化,这时候c1是对象本身,而display1中的 &co是c对象的引用
    coor *c2 = new coor(2,4); //从栈中实例化,c2是指针,而display2中co是对象本身(不建议),
    display1(c1);
    display2(*c2); //找到指针指向的对象
    display3(c2); //  也可以直接传指针
    return 0;
}
void display1(coor &co){
    cout << "m_iX:" << co.m_iX << endl;
cout << "m_iY:" << co.m_iY << endl;
}
void display2(coor co){
    cout << "m_iX:" << co.m_iX << endl;
cout << "m_iY:" << co.m_iY << endl;
}
void display3(coor *co){
    cout << "m_iX:" << co->m_iX << endl;
cout << "m_iY:" << co->m_iY << endl;
}


3 回复 有任何疑惑可以回复我~

c不会就看c++?


1 回复 有任何疑惑可以回复我~
#1

HackerLZH

哈,我笑了
2020-02-09 回复 有任何疑惑可以回复我~

coordinate只是一段地址,*coordinate才是对象。display在传参是需要传入的是对象


0 回复 有任何疑惑可以回复我~
#1

天空mn

你这头像差点让我以为是我回复了这个问题,抓紧换头像
2020-05-04 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
C++远征之模板篇
  • 参与学习       91156    人
  • 解答问题       318    个

本C++教程力求即学即会,所有知识以实践方式讲解到操作层面

进入课程

如果main函数用堆实例化一个对象,传参的时候为什么也要加上一个“*”?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信