C++ 我可以有一个ELI5作为参考和指针,以及何时使用它们吗?

C++ 我可以有一个ELI5作为参考和指针,以及何时使用它们吗?,c++,pointers,reference,C++,Pointers,Reference,我学习编码已经有一段时间了,但仍然不能理解引用和指针。我搜索的每个答案对我来说都太复杂了 例如,当我们调用要使用的变量时 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-&

我学习编码已经有一段时间了,但仍然不能理解引用和指针。我搜索的每个答案对我来说都太复杂了

例如,当我们调用要使用的变量时

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();
这是怎么回事?PrtLog是引用还是指针

3讲师说,*PrtLog正在解除对PrtLog的引用。这是否意味着删除了PrtLog的引用?*和->

4如果调用变量也一样好,为什么我们甚至需要引用或指针

5为什么有些人声称90%的变量将在更高级别上使用引用和指针?它们有什么好处吗?如果我们只是通过变量调用,不是更简单更快吗


如果问题太多,很抱歉。我在引用和指针的任何地方都找不到我能理解的答案,所以我真的很困惑。

指针只是一个数字。此数字对应于计算机RAM中存储相应变量值的位置

int theAnswer=42; int*指针=&theAnswer;
指针只是一个数字。此数字对应于计算机RAM中存储相应变量值的位置

int theAnswer=42; int*指针=&theAnswer; 标准::cout 1 z到底发生了什么?它是在叫y和x吗 引用,通过指针还是仅仅通过变量调用它们

这些变量都不是指针或引用。它们只是…变量。x和y是变量。运算符+x,y

这是怎么回事?PrtLog是引用还是指针

PrtLog是一个指针,通过查看其类型声明可以看到:

FString*
很明显,这是一个指向FString的指针

由于=&Log;,可能会出现混淆;。在代码的这一部分中,&是获取日志指针所需的运算符地址。&仅当它是类型的一部分时表示引用,这里的Log是变量,而不是类型

3讲师说,*PrtLog正在解除对PrtLog的引用。这意味着什么 PrtLog的引用是否已删除?两者之间有什么区别* 和->

在本例中,取消引用只是一个不幸的名称,它意味着获取指针指向的对象。FString*是指向FString的指针,因此取消引用此类指针将生成FString

*和->之间的区别在于->是:*指针的简写,或取消引用指针并访问其成员“”

4如果调用变量,为什么我们甚至需要引用或指针 也一样好吗

您希望使用指针或引用有几个可能的原因。例如,引用对象但不复制对象本身

5为什么有些人声称90%的变量将使用引用 还有更高层次的指针?它们有什么好处吗?如果我们 只是通过变量调用,不是更简单更快吗

谁主张这个?我没有数字,但这似乎不准确。当然,它们都是非常有用的构造,但如果它们被用于这些数字中,这在很大程度上取决于项目

1 z到底发生了什么?它是在叫y和x吗 引用,通过指针还是仅仅通过变量调用它们

这些变量都不是指针或引用。它们只是…变量。x和y是变量。运算符+x,y

这是怎么回事?PrtLog是引用还是指针

PrtLog是一个指针,通过查看其类型声明可以看到:

FString*
很明显,这是一个指向FString的指针

由于=&Log;,可能会出现混淆;。在代码的这一部分中,&是获取日志指针所需的运算符地址。&仅当它是类型的一部分时表示引用,这里的Log是变量,而不是类型

3讲师说,*PrtLog正在解除对PrtLog的引用。这意味着什么 PrtLog的引用是否已删除?两者之间有什么区别* 和->

在本例中,取消引用只是一个不幸的名称,它意味着获取指针指向的对象。FString*是指向FString的指针,因此取消引用此类指针将生成FString

*和->之间的区别在于->是:*指针的简写,或取消引用指针并访问其成员“”

4如果调用变量,为什么我们甚至需要引用或指针 也一样好吗

您希望使用指针或引用有几个可能的原因。例如,引用对象但不复制对象本身

5为什么有些人声称90%的变量将使用引用 还有更高层次的指针?它们有什么好处吗?如果我们 只是通过变量调用,不是更简单更快吗

谁声称 这我没有数字,但这似乎不准确。当然,它们都是非常有用的结构,但如果它们用于这些数字,这在很大程度上取决于项目。

x和y被称为左值表达式,通常缩写为左值。这意味着它们对应于内存位置。表达式的上下文确定是将值写入内存位置,还是从内存位置检索值

在代码x=2中;然后将一个值写入到由x命名的位置。在代码x+2中,从x指定的位置读取一个值

PrtLog是指针,因为它是用指针声明器声明的。这里回答了为什么有人会使用指针的问题:

取消引用意味着从指针表达式中删除间接级别。指针指向内存位置。取消引用指针的结果是对应于该内存位置的左值表达式。这可以有多个层次。如果a是指针,则a->b相当于*a.b。

x和y称为左值表达式,通常缩写为左值。这意味着它们对应于内存位置。表达式的上下文确定是将值写入内存位置,还是从内存位置检索值

在代码x=2中;然后将一个值写入到由x命名的位置。在代码x+2中,从x指定的位置读取一个值

PrtLog是指针,因为它是用指针声明器声明的。这里回答了为什么有人会使用指针的问题:


取消引用意味着从指针表达式中删除间接级别。指针指向内存位置。取消引用指针的结果是对应于该内存位置的左值表达式。这可以有多个层次。如果a是指针,则a->b相当于*a.b。

不会调用变量。只有函数才起作用。我不知道你说的是通过引用调用y和x,通过指针还是仅仅通过变量调用它们?PrtLog是一个指针。有点遗憾的是,取消引用是这样命名的,因为它与引用无关。你只能取消对指针的引用。@Bessietcow我也完全不知道哈哈。演讲者就是这么说的。也许我只是听错了,因为信息太多了。正确的术语是什么?从y和x提取数据?获取数据?编辑:它可能被称为传递。在编码方面有太多的术语,我真的被淹没了变量没有被调用。只有函数才起作用。我不知道你说的是通过引用调用y和x,通过指针还是仅仅通过变量调用它们?PrtLog是一个指针。有点遗憾的是,取消引用是这样命名的,因为它与引用无关。你只能取消对指针的引用。@Bessietcow我也完全不知道哈哈。演讲者就是这么说的。也许我只是听错了,因为信息太多了。正确的术语是什么?从y和x提取数据?获取数据?编辑:它可能被称为传递。在编码方面有太多的术语了,我真的被淹没了。谢谢你的回复,从回复中一分钟一分钟的清晰,但是现在还是有点模糊。如果我错了,请纠正我;我得到的是Reference,指的是存储变量的位置。因此,如果我声明{int32x=5},数字5存储在某个地方,位置是某个随机十六进制数,如123f43。十六进制数叫做地址,对吗?所以,如果我引用int32&y=x,y将是123f43,对吗?@Benjamin,这不是完全正确的,对于指针来说是正确的。指针保存指向的变量的地址。地址的外观在这里并不是一个真正的问题,您不应该过于关注它的细节。请记住,就语言而言,只有指针的值包含其指向的地址,而引用不包含。对于语言来说,引用¬*没有地址,它总是指向它绑定到的变量。2,指针是引用的完全反面?使用上面的例子,如果我编码{int32*z=y},我应该得到z=5,这就是x应该是什么。由于y是x的位置,z将返回存储在位置123f43中的数字,对吗?@Benjamin No,指针有点像引用。它们只是有一些差异,以使引用更安全。这个答案可能会更详细地回答这个问题。他们绝对不是对立面。我很抱歉成为一个麻烦,但在上面的链接中,从第2点开始,我完全迷失了方向。什么是指针,什么是引用,最后什么是变量?为什么它们在定义上如此相似,但同时又如此不同?编辑:在我的虚拟游戏C++游戏制作级别,我真的需要使用指针和引用吗?我真的很想去avo
如果可能的话,我会尽我所能地识别他们1谢谢你的回复,从回复中一分钟一分钟地看它越来越清晰了,但是现在还是有点多云。如果我错了,请纠正我;我得到的是Reference,指的是存储变量的位置。因此,如果我声明{int32x=5},数字5存储在某个地方,位置是某个随机十六进制数,如123f43。十六进制数叫做地址,对吗?所以,如果我引用int32&y=x,y将是123f43,对吗?@Benjamin,这不是完全正确的,对于指针来说是正确的。指针保存指向的变量的地址。地址的外观在这里并不是一个真正的问题,您不应该过于关注它的细节。请记住,就语言而言,只有指针的值包含其指向的地址,而引用不包含。对于语言来说,引用¬*没有地址,它总是指向它绑定到的变量。2,指针是引用的完全反面?使用上面的例子,如果我编码{int32*z=y},我应该得到z=5,这就是x应该是什么。由于y是x的位置,z将返回存储在位置123f43中的数字,对吗?@Benjamin No,指针有点像引用。它们只是有一些差异,以使引用更安全。这个答案可能会更详细地回答这个问题。他们绝对不是对立面。我很抱歉成为一个麻烦,但在上面的链接中,从第2点开始,我完全迷失了方向。什么是指针,什么是引用,最后什么是变量?为什么它们在定义上如此相似,但同时又如此不同?编辑:在我的虚拟游戏C++游戏制作级别,我真的需要使用指针和引用吗?如果可能的话,我真的很想尽量避免他们。谢谢你的回复。我想澄清一下,因为我意识到我不知道在你的答案之后,指针、引用和变量到底意味着什么。*意味着指针,意味着引用和变量只是你定义的一个单词/字母,并赋予它一些含义,比如字母5或单词dog,对吗?在这行代码中:int*pointer=&theAnswer;你为什么把*和&都放进去?我对不断重复我的问题感到很难过,但我对此太困惑了,我真的很想理解。我是sorry@Benjaminint*指针声明一个名为int*类型指针的变量,即int指针。int&ref声明一个名为ref的int&类型变量,即int引用&answer获取answer的地址,即int*类型的值。在这两种情况下,&的使用互不相关在两种上下文中都有不同的含义。回答中的&in&theAnswer被称为操作员或操作员的地址&感谢您的回复。我想澄清一下,因为我意识到我不知道在你的答案之后,指针、引用和变量到底意味着什么。*意味着指针,意味着引用和变量只是你定义的一个单词/字母,并赋予它一些含义,比如字母5或单词dog,对吗?在这行代码中:int*pointer=&theAnswer;你为什么把*和&都放进去?我对不断重复我的问题感到很难过,但我对此太困惑了,我真的很想理解。我是sorry@Benjaminint*指针声明一个名为int*类型指针的变量,即int指针。int&ref声明一个名为ref的int&类型变量,即int引用&answer获取answer的地址,即int*类型的值。在这两种情况下,&的使用互不相关在两种上下文中都有不同的含义。应答中的&in&t称为操作员或操作员的地址&