将变量地址传递给函数
passing address of variable to function
我不擅长指点,但我必须在该领域学习。如果我的理解对我有帮助的话,下面这些应该都是有效的陈述。
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 指针,它可以转换为任何东西,我理解字符指针,它基本上是一个 c 风格的字符串。
我不明白第一个参数,它是某种类型的地址,假设是 float,但它可以是任何东西,struct,int 等
那里发生了什么事?
先这个
int m_out, m_in;
copy(&m_out, m_in);
是 undefined behaviour - 您将未初始化的变量 m_in
传递给了函数 - 因此试图复制一个未初始化的变量。
这个:
create(float& tp, void* form, char* title);
在 C 中没有意义。看起来像 C++ 中的 reference。
第一个参数是一个引用,它只是意味着如果你在你的函数create
中修改了这个字段,这个字段仍然会保持修改状态(即使在你调用create()
的函数中)因为它指向一个地址而不是一个值。
我不擅长指点,但我必须在该领域学习。如果我的理解对我有帮助的话,下面这些应该都是有效的陈述。
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 指针,它可以转换为任何东西,我理解字符指针,它基本上是一个 c 风格的字符串。
我不明白第一个参数,它是某种类型的地址,假设是 float,但它可以是任何东西,struct,int 等
那里发生了什么事?
先这个
int m_out, m_in;
copy(&m_out, m_in);
是 undefined behaviour - 您将未初始化的变量 m_in
传递给了函数 - 因此试图复制一个未初始化的变量。
这个:
create(float& tp, void* form, char* title);
在 C 中没有意义。看起来像 C++ 中的 reference。
第一个参数是一个引用,它只是意味着如果你在你的函数create
中修改了这个字段,这个字段仍然会保持修改状态(即使在你调用create()
的函数中)因为它指向一个地址而不是一个值。