gpt4 book ai didi

c++ - 指针和引用

转载 作者:行者123 更新时间:2023-11-30 00:56:58 26 4
gpt4 key购买 nike

所以,我明白什么是指针,什么是引用,对这个“堆”也有一个模糊的理解。当我们使用这些概念引入函数和类时,我开始失去对事物的控制,例如发送指针、返回指针等

如果通过引用和传递指针本质上执行相同的功能,那么使用一个比另一个有什么优势?两者本质上都是通过引用传递并在被调用函数之外操作对象。

因此,通过引用:

#include <iostream>

class student{
public:
int semesterHours;
float gpa;
};

void defRefS( student &refS );
void defPointerS( student *Ps );
void defValueS( student cS );

int main()
{
student s;
defRefS(s); //Here,
std::cout << "\nBack in main we have " << s.semesterHours << " hours";
std::cout << "\nBack in main the GPA is: " << s.gpa;


student *Ps = &s;
defPointerS(&s); //And here is where I get confused
std::cout << "\nBack in main we have " << s.semesterHours << " hours";
std::cout << "\nBack in main the GPA is: " << s.gpa;

defValueS(s);
std::cout << "\nBack in main object S has: " << s.semesterHours << " hours";
std::cout << "\nBack in main object S has: " << s.gpa << " GPA\n\n";

}

void defRefS( student &refS ) //Passing by reference to object
{
refS.gpa = 4.0;
refS.semesterHours = 12;
std::cout << "\n------------- Reference Function ------------";
std::cout << "\n\nObject S has: " << refS.semesterHours << " hours";
std::cout << "\nObject S has: " << refS.gpa << " GPA";
}

void defPointerS( student *Ps ) //Passing a pointer to the object
{
Ps->gpa = 5.0;
Ps->semesterHours = 14;
std::cout << "\n\n------------- Pointer Function ---------------";
std::cout << "\n\nNow object S has: " << Ps->semesterHours << " hours";
std::cout << "\nNow object S has: " << Ps->gpa << " GPA";
}

void defValueS( student cS ) //Passing the object by value
{
cS.gpa = 100;
cS.semesterHours = 50;
std::cout << "\n\n------------- Value Function ------------------";
std::cout << "\n\nObject S has: " << cS.semesterHours << " hours";
std::cout << "\nObject S has: " << cS.gpa << " GPA";
}

通过引用传递本质上允许符号相似,因为我想,refS s 对象。因此,这导致了一种使用函数操作对象的简单方法。

传递指针很容易理解。它只是指向对象的指针。虽然在上面的代码中这个怎么样:

void defRefS( student &refS );
void defPointerS( student *Ps );
void defValueS( student cS );

是否所有这些函数都只定义为与学生类一起使用?那么,这些函数只能将引用、指针和对象的值传递给这个特定的类吗?

defRefS(s); //Here,
defPointerS(&s); //And here is where I get confused
defValueS(s);

如果通过引用传递,你不应该传递一个对象的地址吗?所以,对我来说,自从在引用函数中传递指针函数的参数后,它就变得更有意义了。

函数defPointerS 被定义为接受指针;我正在发送它的地址?

最佳答案

我猜您刚刚开始使用 C++。不要担心堆,这是一个较低级别的概念,您稍后会了解。如果您真的感兴趣,new 运算符和 malloc 会在堆上分配内存(new 实际上也会调用对象的构造函数,为您提供一个动态对象)。你可以把它想象成一个大空间,你可以在其中放置你以后想要的东西)。

关于指针和引用,它们在大多数情况下是可以互换的(如您所知)。这仅取决于您希望如何构建代码。

在C++中,指针无处不在,人们一般传递指针而不是引用传递。指针被更频繁使用的原因之一是动态内存分配的工作方式(new 运算符或 malloc)——它返回一个指针——然后你执行很多。因此,通常您会通过给定的指针对对象进行操作。

绝对必须使用引用的极少数情况是在复制构造函数或定义运算符中。

我可能错过了一些案例,但这是它的要点。

关于c++ - 指针和引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9252266/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com