所以我有一个我正在制作的结构,我也可以创建一个类,但是当我尝试获取它们的属性时...它给了我随机字母。像完全随机。我看到的东西像“(▌¶∞♥!¶↑♥!¶≤≈¶¶⌠!¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶ ╨┘¶⌠0│“。
我把它修剪成一个完全基本的东西,我仍然无法理解它为什么这样做。
struct Example
{
const char* Whatever = "Hello";
};
当我这样做时
Example* exampleObj;
print(exampleObj->Whatever);
它会显示随机字母。随机字母从程序的执行到执行都有所不同。
答案 0 :(得分:2)
指针是一个变量,它保存对象所在的内存中的地址。因此,声明一个指针是不够的,你还需要创建一些指向它的东西。这意味着你需要留出一些内存 - 你可以放置你的对象。
Example* exampleObj; // at the moment exampleObj contains spurious data
这只是一个指针。但你没有创造任何东西可以指出。如果您尝试访问它,则会访问虚假垃圾!
因此,要分配一块包含有效对象的内存,您需要使用new
,如下所示:
Example* exampleObj = new Example; // new returns a chunk of valid memory
现在为指针指定了一个有效的内存地址,其中包含您使用new
创建的对象。
注意:强>
通常无需使用new
手动分配对象。相反,您可以使用automatic
变量而不是指针:
Example exampleObj; // note no * means its not a pointer but a whole object
<强> SOLUTION:强>
因此,我们有两种方法可以解决您的问题。创建一个new
对象并将其地址分配给指针或创建一个automatic
对象:
// Solution 1:
Example* exampleObj = new Example; // Must remember to delete (smart pointer?)
print(exampleObj->Whatever);
// Solution 2 (usually MUCH better)
Example exampleObj;
print(exampleObj.Whatever); // note: uses . rather than ->