这是来自OOP高级课程考试的问题,用C++教授(在TAU大学,本学期):
问:C++指针和引用有什么区别?
A. A reference is the entire object while a pointer is only the address of it. B. The same meaning, and difference is only in syntax and usage. C. The syntax used to access the object. D. Pointers are simple address to the object while a reference uses the virtual table.
哪个是正确的答案?
课程老师声称A是正确的,并且对象的引用实际上是对象本身.那是对的吗?我意识到访问引用等同于访问对象本身,但是,在破坏引用时,我们不会破坏对象本身.引用是对象的替代名称,但是说reference == object true?
顺便说一句,讲师给了一个faq的以下链接作为对他的主张的支持,引用:
"重要提示:尽管引用通常是使用底层汇编语言中的地址实现的,但请不要将引用视为指向对象的滑稽指针.引用是对象.它不是指向对象的指针,也不是对象的副本.这是对象."
但是,我认为这是不正确的.
任何人都能告诉我指针调用和引用调用之间的确切差异.实际上这两种情况都发生了什么?
例如:
按参考呼叫:
void swap(int &x, int &y)
{
int temp;
temp = x; /* save the value at address x */
x = y; /* put y into x */
y = temp; /* put x into y */
return;
}
swap(a, b);
Run Code Online (Sandbox Code Playgroud)
通过指针调用:
void swap(int *x, int *y)
{
int temp;
temp = *x; /* save the value at address x */
*x = *y; /* put y into x */
*y = temp; /* put x into …Run Code Online (Sandbox Code Playgroud) 我有以下代码.
int x=80;
int &y=x;
x++;
cout<<x<<" "<<--y;
Run Code Online (Sandbox Code Playgroud)
输出结果是80 80.我不明白怎么做.我认为x的输出是81,尽管我对y一无所知.参数变量如何受减量运算符的影响.有人可以解释一下吗?
我已经在列表上实现了操作,其中一个是添加,因为我不想返回任何东西,我读到我必须使用**,它可以工作,但我在另一个地方看到它被传递为*&,但我不知道区别
addNode(node*&head,int value)addNode(node**head,int value)
有什么区别,哪一个更好,还是意味着相同?我知道第二个是指向指针的指针.
谢谢
在下面的代码,都amp_swap()和star_swap()似乎是在做同样的事情.那么为什么有人喜欢使用一个而不是另一个呢?哪一个是首选符号,为什么?或者只是品味问题?
#include <iostream>
using namespace std;
void amp_swap(int &x, int &y)
{
int temp = x;
x = y;
y = temp;
}
void star_swap(int *x, int *y)
{
int temp = *x;
*x = *y;
*y = temp;
}
int main()
{
int a = 10, b = 20;
cout << "Using amp_swap(): " << endl;
amp_swap(a, b);
cout << "a = " << a << ", b = " << b << endl;
cout …Run Code Online (Sandbox Code Playgroud) 在阅读了关于指针和引用之间差异的问题之后,我决定使用引用而不是指针用于我的类字段.然而,似乎这是不可能的,因为它们不能被宣布为未初始化(对吧?).
在我现在正在处理的特定场景中,我不想使用正常变量(顺便说一下它们的正确用语是什么?)因为它们在我声明它们时会自动初始化.
在我的代码片段中,bar1自动使用默认构造函数实例化(这不是我想要的),而bar2导致编译器错误,因为你不能使用未初始化的引用(正确吗?),而*bar3很高兴因为指针可以声明未初始化(顺便说一下,最好将此设置为NULL吗?).
class Foo
{
public:
Bar bar1;
Bar &bar2;
Bar *bar3;
}
Run Code Online (Sandbox Code Playgroud)
看起来我必须在这种情况下使用指针,这是真的吗?另外,使用变量的最佳方法是什么? - >语法有点麻烦......运气好吗?什么智能指针,等等?这有关系吗?
尝试在我的类中实现引用变量字段并在构造函数中初始化它之后,为什么我会收到以下错误?
../src/textures/VTexture.cpp: In constructor ‘vimrid::textures::VTexture::VTexture()’:
../src/textures/VTexture.cpp:19: error: uninitialized reference member ‘vimrid::textures::VTexture::image’
Run Code Online (Sandbox Code Playgroud)
这是真正的代码:
// VTexture.h
class VTexture
{
public:
VTexture(vimrid::imaging::ImageMatrix &rImage);
private:
vimrid::imaging::ImageMatrix ℑ
}
// VTexture.cpp
VTexture::VTexture(ImageMatrix &rImage)
: image(rImage)
{
}
Run Code Online (Sandbox Code Playgroud)
我也试过在标题中这样做,但没有运气(我得到同样的错误).
// VTexture.h
class VTexture
{
public:
VTexture(vimrid::imaging::ImageMatrix &rimage) : image(rImage) { }
}
Run Code Online (Sandbox Code Playgroud)
弗雷德拉森 - 是的!有一个默认的构造函数; 我忽略了它,因为我认为这与问题无关(我多么愚蠢).删除默认构造函数后,我导致编译器错误,因为该类与std :: vector一起使用,需要有一个默认构造函数.因此看起来我必须使用默认构造函数,因此必须使用指针.羞耻......或者是吗?:)
可能重复:
C++中指针变量和引用变量之间的差异
当我开始使用C++时,我发现下面的操作令人困惑.我知道通过引用传递和传递值.但是最近我遇到了这样的功能让我很困惑:
Func1(int &a)
Func2(int *a)
Run Code Online (Sandbox Code Playgroud)
这两个函数都期望a的地址,但是当我调用Func1时,我会这样做,Func1(a)而在Func2的情况下,我调用了Func2(&a)
为什么Func1在期望a的地址时直接接受int a
我只是想知道,如何在内部存储引用?我觉得深层次的理解会让我更好地理解概念指针与参考,并做出决策选择.
我怀疑它基本上与指针一样,但编译器负责处理指针.请指教.
为此道歉,我是一名学生正在努力学习C++,我只是觉得如果我问这个问题并且对此有很多正确的看法会更好,所以我很抱歉提出愚蠢的问题.我只是觉得问题比不知道更好.
我分别理解地址运算符&和const关键字的含义.但是,当我在阅读某个地方的示例代码时,我看到const&使用了,只是想要暗示的是什么?
它用于代替函数原型中的参数,例如:
void function (type_Name const&);
Run Code Online (Sandbox Code Playgroud)
如果只使用其中一个我会理解,但我在这里有点困惑所以一些专业的见解会很棒.
我刚开始使用C++并且遇到过引用并且没有完全理解.
我读到的引用是对象的替代名称.为什么使用它而不是直接访问对象,因为对引用的任何操作都直接反映在对象上......?
而且,它说
double& dr = 1; ---- says it is an error (some lavalue needed)
const double& cdr = 1; ---- says it is ok.
Run Code Online (Sandbox Code Playgroud)
我不明白它.所以请解释为什么它...
谢谢...:)