我已经学习编码已经有一段时间了,但仍然无法理解引用和指针。我搜索的每个答案对我来说都太复杂了。
例如,当我们调用要使用的变量时
int32 y = 1;
int32 x = 2;
int32 z = y + x;
1)“z”中到底发生了什么?它是通过引用,通过指针还是仅通过变量来调用“y”和“x”?
在这段代码中,我目前正在学习
FString Log = TEXT("Hello");
FString* PrtLog = &Log;
Log.Len();
(*PrtLog).Len();
PrtLog->Len();
2)这是怎么回事? “PrtLog”是引用还是指针?
3)讲师说* PrtLog是“取消引用” PrtLog。这是否意味着删除了PrtLog的引用? *和->之间有什么区别
4)如果调用变量也一样,为什么我们甚至需要引用或指针?
5)为什么有人声称90%的变量将使用更高级别的引用和指针?他们有什么好处吗?如果仅按变量调用,不是更简单,更快吗?
抱歉,如果有太多问题。我无法在引用和指针的任何地方都能得到答案,所以我感到很困惑。
最佳答案
1) What exactly is happening in "z"? Is it calling "y" and "x" by reference, by pointer or just calling them by variable?
这些变量都不是指针或引用。他们只是..变量。
x
和y
是使用的变量。 operator+(x, y)
。2) What is going on here? Is "PrtLog" a reference or a pointer?
PrtLog
是一个指针,可以通过查看其类型声明来看到它:FString*
显然,它是
FString
的指针。可能由于
= &Log;
而引起困惑。在这部分代码中,&
是获取指向Log
的指针所需的地址运算符。 &
仅在类型的一部分时表示引用,这里的Log
是变量,而不是类型。3) The lecturer said *PrtLog is "dereferencing" PrtLog. Does that mean the reference for PrtLog is removed? Whats the difference between * and ->
在这种情况下,取消引用只是一个不幸的名字,它意味着获取指针指向的“事物”。
FString*
是指向FString
的指针,因此取消引用此类指针将产生FString
。*
和->
之间的区别在于->
是:(*pointer).
或“取消引用pointer
并访问其成员”的简写。4) Why do we even need a reference or a pointer if calling a variable is just as fine?
您可能有一些可能要使用指针或引用的原因。例如,引用一个对象但不复制该对象本身。
5) Why do some people claim 90% of variables will be using references and pointers in higher levels? Are they beneficial in any way? If we just call by variable, isn't it simpler and faster?
谁声称呢?我没有数字,但这似乎不准确。当然,它们都是非常有用的构造,但是如果以这些数目使用它们,则在很大程度上取决于项目。
关于c++ - 我可以使用ELI5作为引用和指针以及何时使用它们吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62416164/