char *pointer1;
char *pointer2;
pointer1 = new char[256];
pointer2 = pointer1;
delete [] pointer1;
Run Code Online (Sandbox Code Playgroud)
换句话说,我还必须这样做delete [] pointer2吗?
谢谢!
我对C++有些新意,并尝试用Qt处理事情,并遇到了这个令人困惑的事情:
各种教程的概念陈述如下:
Class *obj;
Run Code Online (Sandbox Code Playgroud)
*obj- 将显示存储在引用内存中的对象的值
obj- 将是它指向的内存地址
所以,我会做类似的事情
*obj=new Class();
Run Code Online (Sandbox Code Playgroud)
但如果我想访问一个函数,我必须做obj->function1();
而不是*obj->function1();
- 不确定为什么,因为普通对象[ normalObj.function1();]会起作用,因为这是直接的值.
因此,对于指针对象,我们为什么要使用内存引用来访问函数,或者在普通对象的情况下,它总是引用它
PS:有人可以指导我在C++中使用指针的一个很好的教程,这样我的查询可以直接在其中解决.
Scott Meyer在他的书中Effective C++说dynamic_cast,用于执行安全转换或跨继承层次结构.也就是说,使用dynamic_cast将指针或对基类对象的引用转换为指针或对派生或兄弟基类对象的引用,以便您可以确定转换是否成功.
失败的强制转换由空指针(在转换指针时)或异常(在转换引用时)指示.
我想得到两个代码片段,显示在投射指针的情况下失败的强制转换,并且可以指示投射引用.
我很高兴在我的代码中使用C++样式的转换操作符,但我不能说我真的理解幕后发生的事情.我基本上想知道在以下短进程中指针实际发生了什么:
class A {};
class B : public A {};
class C : public B {};
A* pC = new C();
B* b = static_cast<B*>(pC); // Is the value of pC changed by the cast?
C* c = static_cast<B*>(pC); // Is the value of pC changed by the cast?
B* b2 = static_cast<B*>(c) // Is the value of c now equal to the value of b2?
Run Code Online (Sandbox Code Playgroud)
我意识到指向的对象pC总是类型,C但在第一次转换后,我假设存储的地址b不再等于pC.但如果演员改变了pC我的假设的价值是错误的.简而言之,强制转换操作符实际上是否可以更改它们所投射的指针的地址?这似乎是一个非常简单的问题,但在我看来,图片并不清楚如何将具有继承层次结构的对象存储在内存中以及如何通过强制转换操纵指针.
在我的脑海中, …
所以,我想使用智能指针而不是原始的,几乎SO上的每个主题都说Boost库.但性病有这样的事情std::auto_ptr和std::shared_ptr.为什么要提升?有什么不同?
这个问题不是关于实现的差异,而是关于使用Boost指针的原因.我想,给出答案,包括回答日期和背景,是相当有用的.它有助于理解如何将Boost指针添加到std.
我现在必须尝试过20种方法.我真的需要帮助,无论我做什么,我都会收到与此类似的错误.
a value of type "int" cannot be used to initialize an entity of type "int (*)[30]"
Run Code Online (Sandbox Code Playgroud)
即这会让我这样一个错误
int(*array)[160] = malloc((sizeof *array) * 10);
Run Code Online (Sandbox Code Playgroud)
并做这样的事情
int** Make2DintArray(int arraySizeX, int arraySizeY) {
int** theArray;
theArray = (int**) malloc(arraySizeX*sizeof(int*));
int i;
for (i = 0; i < arraySizeX; i++)
{
theArray[i] = (int*) malloc(arraySizeY*sizeof(int));
}
return theArray;
}
Run Code Online (Sandbox Code Playgroud)
会得到我的
"void *(size_t)" in "memory.c" at line 239 and: "int()"
Run Code Online (Sandbox Code Playgroud)
有没有人有一个解决方案如何成功分配int [160] [10]的2dArray
我正在读一本关于二元搜索树的书,有些奇怪的东西出现了.
class BST
{
public:
void insert(const Comparable & item)
private:
BinaryNode *root;
struct BinaryNode
{
Comparable element;
BinaryNode *left;
BinaryNode *right;
BinaryNode(const Comparable & theElement, BinaryNode *lt, BinaryNode *rt) :
element(theElement), left(lt), right(rt) {}
}
void insert(const Comparable & item, BinaryNode * & t) const;
};
Run Code Online (Sandbox Code Playgroud)
该private insert函数是函数的辅助函数public insert,private insert函数查找使用递归插入的正确位置.
我不明白的部分是BinaryNode * & t在参数中.这是什么意思?指针的地址t?
关于python和.join()方法的一个基本问题:
file1 = open(f1,"r")
file2 = open(f2,"r")
file3 = open("results","w")
diff = difflib.Differ()
result = diff.compare(file1.read(),file2.read())
file3.write("".join(result)),
Run Code Online (Sandbox Code Playgroud)
上面的代码片段以字符串格式生成一个存储在名为"results"的文件中的良好输出,逐行显示两个文件之间的差异.但是我注意到,如果我只是在不使用.join()的情况下打印"result" ,编译器将返回包含内存地址的消息.在尝试将结果写入文件而不使用.join()之后,编译器通知我,在.join()方法中只能使用字符串和字符缓冲区,而不是生成器对象.因此,根据我提出的所有证据,如果我错了,请纠正我:
result = diff.compare(file1.read(),file2.read()) <----结果是生成器对象?
result是一个字符串列表,它result本身是第一个字符串的引用?
.join() 获取一个内存地址并指向第一个,然后迭代该结构中字符串的其余地址?
生成器对象是一个返回指针的对象?
如果我的问题不清楚,我道歉,但我基本上想问问python退伍军人,如果我的扣除是正确的.我的问题不是关于可观察的结果,而是更多关于python的内部工作原理.我感谢你的所有帮助.
有没有办法在VBA(或VB6)中复制数组引用?
在VBA中,数组是值类型.将一个数组变量分配给另一个数组变量复制整个数组.我想得到两个数组变量指向同一个数组.有没有办法实现这一点,可能使用一些API内存函数和/或VarPtr函数,实际上返回VBA中变量的地址?
Dim arr1(), arr2(), ref1 As LongPtr
arr1 = Array("A", "B", "C")
' Now I want to make arr2 refer to the same array object as arr1
' If this was C#, simply assign, since in .NET arrays are reference types:
arr2 = arr1
' ...Or if arrays were COM objects:
Set arr2 = arr1
' VarPtr lets me get the address of arr1 like this:
ref1 = VarPtr(arr1)
' ... But I don't know of a …Run Code Online (Sandbox Code Playgroud) 我一直在搜索C#语言规范,我找不到任何说明指针类型(例如int*)是否使用默认值初始化的内容.我创建了一个简单的测试应用程序,似乎将它们初始化为零,但我想用规范确认.
我开始寻找这个,因为我注意到在反射器中IntPtr类使用此代码来定义它IntPtr.Zero:
public struct IntPtr : ISerializable
{
private unsafe void* m_value;
public static readonly IntPtr Zero;
.......
public static unsafe bool operator ==(IntPtr value1, IntPtr value2)
{
return (value1.m_value == value2.m_value);
}
........
}
Run Code Online (Sandbox Code Playgroud)
这意味着当你与IntPtr.Zero它进行比较时,实际上是与分配给m_value具有类型的字段的默认值进行比较void*.
谢谢.