c++ - 当一个函数/方法需要 * 或 &
问题描述
编辑:谢谢大家。很多很棒的信息要过去。需要我一段时间来吸收。
经过 10 多年与编程的不健康浪漫之后,我想我终于明白了指针。但我仍然对他们感到不舒服。
我有一些相对简单的代码:
#include <iostream>
#include <string.h>
using namespace std;
class MyString
{
private:
char* buffer;
public:
//Constructor
MyString(const char* initString)
{
if(initString != NULL)
{
buffer = new char[strlen(initString)+1];
strcpy(buffer, initString);
}
else
buffer = NULL;
}
//Destructor
~MyString()
{
cout << "Invoking destructor, clearing up\n";
if (buffer != NULL)
delete [] buffer;
}
int GetLength()
{
return strlen(buffer);
}
const char* GetString()
{
return buffer;
}
};
int main()
{
MyString SayHello("Hello from String Class");
cout << "String buffer in MyString is " << SayHello.GetLength();
cout << " characters long\n";
cout << "Buffer contains: " << SayHello.GetString() << endl;
return 0;
}
为什么MyString
希望从第一个参数(在main()
?)中创建一个指针,为什么它不只是通过副本传递?还是使用运营商的地址?
我在问“错误的问题”吗?看不清楚什么?
非常感谢。希望问题很清楚。
解决方案
它不是。
字符串文字只是内存中某处的一系列字符。它们没有被某个物体包裹。
像MyString
或std::string
可能充当包装器对象的对象并具有复制或更改它们的方法。
但是字符串文字只是记忆。以 结尾的字符序列'\0'
。它们无法更改,因此访问它们的方式是const char*
.
这是传递一个字符串文字,poiter
速度很快。您可以接受std::string
它具有显式构造函数并将std::string
从字符串文字创建一个字符串对象。
另一方面,通过引用(&)传递是完全不同的概念。这就像传递对象。没有副本,没有指针(编译器可能用指针完成,但你不应该考虑这个)。
推荐阅读
- join - 2个表之间的不同连接
- javascript - 如何从函数中多次产生价值?
- django - Django,如何在不创建新文件/django_session 行的情况下测试迁移
- node.js - “模板启动”命令在 ./assets/js/theme/account.js 中显示错误 模块构建失败
- c# - 在 unity3d 中从脚本创建文本文件有延迟/错误
- postgresql - postgres 如何选择要索引的内容,重要的是什么,会有什么不同?
- c - 是否将灵活的数组成员转换为另一种类型的未定义行为?
- javascript - React.js 状态未在 useEffect Hook 中的事件侦听器中更新
- node.js - nodejs - 使用 SOCKS5 协议发送和接收电子邮件
- linux - 如何知道 Linux 系统中哪个用户解锁了?