此代码块中会发生什么
what happens in this block of code?
当我这样做时会发生什么?当我删除"boo1"的第一个初始化时,它会打印 boo2,但现在它仍然不打印任何内容。这是否意味着指针分配了一个随机内存并为其分配了"boo1"值,现在我无法访问它还是什么?
string *p;
*p="boo1";
p=new string;
*p="boo2";
cout << *p; //prints nothing
第 1 行:"p"包含随机值,即指随机内存地址。
第 2 行:"*P"引用的随机内存块被解释为字符串实例。此实例由"boo1"分配。
试试这样:
string *p = new string;
*p = "boo1";
cout << *p << 'n';
*p = "boo2";
cout << *p << 'n';
delete p;
请记住:
- std::string 与愚蠢的 char[] 数组不同!
- 使用前必须分配所有指针!
- 所有"新"都必须有相应的"删除"!
如果你将一个字符串声明为指针(字符串 *p),你必须为它分配内存,
所以正确的工作方法是:
string *p = new string;
*p = "boo1";
cout << *p << 'n';
*p = "boo2";
cout << *p << 'n';
前面的答案是正确的,但是为什么不使用参考,在您的情况下似乎更方便。像这样:
std::string p;
p = "boo1";
std::cout << p << std::endl;
p = "boo2";
std::cout << p << std::endl;
问候
米歇尔。
相关文章:
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 0-1背包代码中的错误.我的代码中有什么错误
- 我是C++编程的新手,这些代码之间有什么区别,我应该使用哪一个
- 不确定要在我的main中放入什么才能使我的代码正常工作
- 这行代码在C++类中意味着什么
- 使用不同的CRT将新的C++代码与旧的(二进制)组件隔离开来的最佳方法是什么
- 当无法使用模板和宏时,生成类型变体C++代码的最简单方法是什么?
- 我可以做些什么来消除或最小化这种将提供相同功能和行为的代码重复
- 以下 C++ 代码用于 -> "#define idiv(a, b) (((a) + (b) / 2) / (b))" 是什么?
- 这个带有模板<类 Vector 的C++代码片段有什么问题>
- 此代码中的操作流程是什么?C/C++.
- 当我从下面的代码中删除关键字 virtual 时,它可以正常工作,否则会出现错误。在这里"virtual"字的意义是什么?
- 此代码验证公式是什么意思?
- 这是什么代码?为什么它有效?C++
- 当您希望在Arduino Uno编程中同时执行不同函数时,使用什么代码/语句
- 这是什么代码?C或C
- 在 c++ 中应该使用什么代码而不是 getche
- 什么代码更适合用于运算符重载
- 什么代码可以使这个循环工作