2

我不擅长指针,但我必须在该领域学习。如果我的理解正确,这些都应该是下面的有效陈述。

int* a;
int b = 10;
a = &b;
(*a) = 20;

(*a) == b;  //this should be true

如果你有这样的功能:

void copy(int* out, int in) {
    *out = in;
}

int m_out, m_in;

copy(&m_out, m_in);

m_out == m_in; // this should also be true

但我看到了这样的功能

create(float& tp, void* form, char* title);

我理解 void 指针,它可以转换为任何东西,我理解字符指针,它基本上是 ac 样式字符串。

我不明白第一个参数,它是某种类型的地址,假设是一个浮点数,但它可以是任何东西,一个结构,一个 int 等。

那里发生了什么?

4

2 回答 2

8

首先这个

int m_out, m_in;

copy(&m_out, m_in);

未定义的行为-您将未初始化的变量传递m_in给函数-因此尝试复制未初始化的变量。

这:

create(float& tp, void* form, char* title);

在 C 中没有意义。看起来像是来自 C++ 的参考。

于 2016-01-22T07:13:22.727 回答
0

第一个参数是一个引用,它只是意味着如果你在你的函数中修改这个字段create,这个字段仍然会被修改(即使在你调用的函数中create()),因为它指向一个地址而不是一个值。

于 2016-01-22T09:59:43.523 回答