(C++)使用指向整数的顺从指针初始化字符串变量并且它正在打印某些内容?
(C++) Initializing a string variable with a deferenced pointer pointing to an integer and it's printing something?
我一直在努力在编程文凭上取得一些领先,并决定自学一些C++,只是为了知道我将要进入什么领域。所以我的情况是,我已经初始化了一个名为thisIAString的字符串变量,方法是为它分配一个指向整数变量的延迟指针的值。我认为它不会起作用,因为它们不是真正兼容的变量类型,但在将结果输出到控制台时,它确实给了我350。我想了解它的实际含义。这是代码:
#include <iostream>
using namespace std;
int main()
{
string thisIsAString;
int randomVariable = 32;
int *ptrRandomVar = &randomVariable;
*ptrRandomVar = 1000;
thisIsAString = *ptrRandomVar;
cout << thisIsAString << endl;
}
所以当我输出这个时,它会给我结果350,我不知道它意味着什么。
感谢所有帮助:)!谢谢你抽出时间。
thisIsAString = *ptrRandomVar;
是关键线*ptrRandomVar的值为1000(十进制)。使用标准转换规则将其转换为char,该规则会将其截断为232(十六进制中的1000是0x3e8,截断后得到0xe8==232)。这将为您提供一个包含值为232的字符的字符串。
当您打印该字符时,您的标准库不知道如何打印值为232的字符,所以它会为您以八进制书写(我不知道这是否是标准的),这会给您提供字符"\350",其中0350是八进制的232。
;TLDR1000=0x3E8->char 0xE8=232=\350(八进制)
这是一步一步发生的事情:
*ptrRandomVar = 1000;
1000被编码为0x3E8,这意味着在内存中,假设您使用的是一个小的endian平台,则会得到E8030000...
。thisIsAString = *ptrRandomVar;
现在将这个int赋值给字符串。您的编译器不会抱怨!可以使用char(也是1字节整数类型)初始化字符串,也可以使用从int到char的隐式数字转换。因此,您的字符串现在的大小为1,char的值为0xE8(其余部分被截断)cout << thisIsAString << endl;
您要求输出字符串:在没有其他特定代码的情况下,输出为标准ASCII编码。然而,0xE8(=232)超出了标准ASCII范围(在127处停止)。因此,默认行为是输出其八进制值,前面加一个反斜杠。232(0xE8)在八进制中给出\350。
您可以将整数转换为字符串,然后进行赋值。
- 打印所有继承的类成员变量和方法
- 为什么我的字符串变量没有打印完整的字符串?
- 从模板创建通用打印函数,以打印基元数据类型变量的值
- 在我的变量打印C++后无法获得 $ 打印符号
- 为自定义打印调试实现传递任何类型的变量
- std::cout 在打印变量与函数表达式时的行为不同
- 打印类中的变量
- 如何在循环中使用scanf,将值存储到一个变量中,然后打印出来?
- 为什么变量的打印地址在每次执行时都会打印随机值,即使它是 C 中的逻辑地址?
- 使用更改此变量的函数在同一行中打印引用变量
- 如何让m_refcount变量打印出我想要的值而不是垃圾
- 面临在 if 语句之外打印变量数据的问题 完成使用 Qt 编程
- 错误:变量或字段'PrintEntity'声明无效无效打印实体(实体 e);
- 使用指针变量打印特定的数组变量
- 使用自动变量打印矢量的内容
- void 函数使用相同的变量打印两个不同的答案
- 为什么字符串变量打印与垃圾
- cout<<变量;打印出空白
- 为什么未初始化的变量打印一个奇怪的负值
- 当一个变量打印未初始化的变量contain时,在C++中该怎么办