【发布时间】:2015-01-30 13:00:13
【问题描述】:
我正在编写一个函数来从着色器代码文件中加载文本。我偶然发现了关于指针的一些奇怪的东西,我不知道为什么。
我有一个名为 Load 的函数。在这个函数中,我将文本从文件流中复制到 output 变量中。
static void Load(const GLchar* source_path, GLchar* output,GLint& count )
{
string code;
// loading logic here
code= vShaderStream.str(); // copying the string from the stream
count = code.length();
output = new GLchar[count];
std::size_t length = code.copy(output, count, 0);
output[length]= '\0';
}
Load是这样调用的:
for (size_t i = 0; i < d_n_fragment; i++)
{
Load(d_fragment_source_path, d_fragment_code[i], d_fragment_string_count[i]);
}
其中 d_fragment_code 是 Glchar** 的双指针,已经初始化。调用 Load 函数后,指针 d_fragment_code[i] 不包含任何文本。我尝试将 Load 函数的签名更改为:
static void Load(const GLchar* source_path, GLchar*& output,GLint& count )
从而通过引用传递指针。它可以工作,在调用函数后 d_fragment_code 正确保存了从文件加载的文本,但我不明白为什么要通过引用传递指针。
我认为只传递一个指针就足以改变它的内容。我很困惑,你能解释一下吗?
【问题讨论】:
-
你不只是改变内容,你在这里改变指针:
output = new GLchar[count];
标签: c++ pointers double-pointer