C ++结构中的随机字母

时间:2014-09-27 19:59:35

标签: c++ class random struct letters

所以我有一个我正在制作的结构,我也可以创建一个类,但是当我尝试获取它们的属性时...它给了我随机字母。像完全随机。我看到的东西像“(▌¶∞♥!¶↑♥!¶≤≈¶¶⌠!¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶ ╨┘¶⌠0│“。

我把它修剪成一个完全基本的东西,我仍然无法理解它为什么这样做。

struct Example
{
    const char* Whatever = "Hello";
};

当我这样做时

Example* exampleObj;
print(exampleObj->Whatever);

它会显示随机字母。随机字母从程序的执行到执行都有所不同。

1 个答案:

答案 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 ->