我知道指针的基础知识.
我想知道你什么时候使用
Foo *foo;
Run Code Online (Sandbox Code Playgroud)
代替
Foo foo;
Run Code Online (Sandbox Code Playgroud)
而另一个人则不允许你这样做.
提前致谢
#include "passenger.h"
class node
{
public:
passenger dataItem;
node nextNode;
};
Run Code Online (Sandbox Code Playgroud)
为什么在尝试创建其类型为其所在类的变量时会出现不完整类型不允许错误?
我对以下函数的理解是它要求整数变量的地址.
void MyFunction(int & myParameter)
Run Code Online (Sandbox Code Playgroud)
但在我的代码中,我有:
int myVar;
myFunction(&myVar)
Run Code Online (Sandbox Code Playgroud)
我收到编译器错误说:没有已知的从'int*'到'const int&'的转换.
当我没有'&'传递'myVar'时,编译器很高兴.我有点困惑,这里发生了什么.在此上下文中,指针符号'*'和地址符号'&'之间有什么区别?我什么时候应该使用?使用'&'时c和c ++之间是否有区别?提前致谢.
我在C#中有一个非常基本的问题.所以我有一个名为m_permutation(类的属性)的int数组,并且在类的方法中我有以下代码:
int[] newPermutation = new int[m_permutation.Length];
newPermutation = m_permutation;
newPermutation[0] = 5;
Run Code Online (Sandbox Code Playgroud)
我很困惑为什么m_permutation在这段代码中也被改变了,我该如何修复呢?
我知道我可以通过循环初始化newPermutation,以获得相同的m_permutation值,并修复它.但是,有人可以解释为什么会发生这种情况,最好的解决办法是什么?
谢谢,
波格丹
以此代码为例:
class MyClass
{
public:
~MyClass()
{
cout << "Destructor called\n";
}
};
int main()
{
MyClass Testvar;
// destructer called for this
MyClass *ptrvar;
ptrvar = &Testvar;
// but not for this
}
Run Code Online (Sandbox Code Playgroud)
它给我带来了很多困惑.上面的代码打印:析构函数只调用一次.我在main中声明了两个MyClass实例,其中一个是MyClass类型的普通变量,另一个是指向普通变量的相同类型的指针.这里不需要析构函数(没有动态分配),但为了举例,我在类中定义了一个.因此,因为定义了两个类实例,所以应该两次调用析构函数.但是,当我运行此代码时,这不会发生.如果我删除指针并定义一个更正常的实例,程序将打印:
Destructor调用了Destructor
我的观察是当指针实例超出范围时,不会隐式调用析构函数.我是对的还是只是遗漏了什么.