我一直试图在我的编程文凭上取得一些先机,并决定自学一些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,我不知道它意味着什么。
所有帮助表示赞赏:)! 感谢您的时间。
答案 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)
您可以将整数转换为字符串,然后将其分配。