(C ++)使用指向整数的引用指针初始化一个字符串变量并打印一些东西?

时间:2013-07-05 07:49:37

标签: c++ pointers

我一直试图在我的编程文凭上取得一些先机,并决定自学一些C ++只是为了知道我正在进入什么。所以我的情况是我已经初始化了一个名为thisIsAString的字符串变量,通过为它指定一个指向整数变量的deferenced指针的值。我认为它不会起作用,因为它们不是真正兼容的变量类型,但在将结果输出到控制台时确实给了我\ 350。我想了解它的实际含义。这是代码:

#include <iostream>
using namespace std; 

int main()
{
   string thisIsAString; 
   int randomVariable = 32; 

   int *ptrRandomVar = &randomVariable;
   *ptrRandomVar = 1000; 

   thisIsAString = *ptrRandomVar; 

   cout << thisIsAString << endl;
 }

因此,当我输出它时,它给我结果\ 350,我不知道它意味着什么。

所有帮助表示赞赏:)! 感谢您的时间。

3 个答案:

答案 0 :(得分:6)

   thisIsAString = *ptrRandomVar; 

是关键线。 * ptrRandomVar的值为1000(十进制)。使用标准转换规则将其转换为char,将其截断为232(十六进制中的1000为0x3e8,截断为0xe8 == 232)。这将为您提供一个包含值为232的字符的字符串。

当您打印该字符时,您的标准库不知道如何使用值232打印字符,所以它是以八进制写出来的(我不知道这是否是标准的),这会给你一个字符“\ 350”,其中0350是八进制的232。

答案 1 :(得分:2)

; TLDR 1000 = 0x3E8 - &gt; char 0xE8 = 232 = \ 350(八进制)

这是一步一步发生的事情:

  • *ptrRandomVar = 1000; 1000被编码为0x3E8,这意味着在内存中,假设您使用的是小端平台,则会获得E8030000...

  • thisIsAString = *ptrRandomVar;现在将此int分配给您的字符串。你的编译器没有抱怨!您可以使用char(也是1字节整数类型)初始化字符串,并且可以使用从int到char的隐式数字转换。所以你的字符串现在大小为1,char的值为0xE8(其余的被截断)

  • cout << thisIsAString << endl;您要求输出字符串:没有其他特定代码,输出是标准ASCII编码。但是,0xE8(= 232)超出标准ASCII范围(停止在127)。所以默认行为是输出八进制值,前面加一个反斜杠。 232(0xE8)以八进制为单位给出\。

答案 2 :(得分:1)

您可以将整数转换为字符串,然后将其分配。