[英]Pointers - confusion
我想知道使用指针是否总是更好。 我有一个只有一个字节(或一些整数)的结构。 该结构包含例程的参数,并将在那里传递。 如果我不使用指针(在结构内部),但通过指针传递此结构,那么在main_loop中进行的更改(对于logPrio)是否可以在外部(即在main中)可见?
请看这个样本让我:
typedef struct mainloop_param_t
{
unsigned char *logPriop;
//or versin w/o pointer
unsigned char logPrio;
}mainloop_param_t;
int main()
{
mainloop_param_t mlparams;
unsigned char logPrio;
mlparams.logPriop = &logPrio;
// or nothing cause mlparams.logPrio already initialized
// would mlparams.logPrio be a copy or original?
g_timeout_add (5000, (GSourceFunc)main_loop, &mlparams);
}
我想知道使用指针是否总是更好。
在需要时使用指针。 不必要地使用它可能会导致您和其他读者稍后混淆。
如果我不使用指针,那么在main_loop中进行的更改(对于logPrio)是否会在外部(即在main中)可见?
在全局变量和结构为YES的情况下,否则为NO。
如果我不使用指针(在结构内部),但通过指针传递此结构,那么在main_loop中进行的更改(对于logPrio)是否可以在外部(即在main中)可见?
是的,在你传递了mlparams的地址后,无论是指针还是mlparams中的变量,main_loop中的每个更改都可以在main中看到。
我想你的问题是指针应该被使用的时候。 在我看来,指针只是一个访问数据的工具,它本身不应该是一个问题。 重要的是“数据应该放在哪里?” 和“程序如何访问数据?”
以下是用法的一部分:
unsigned char logPrio;
mlparams.logPriop = &logPrio;
在此代码中,使用指针没有任何意义。 更改发生在main中,并且对于g_timeout_add
可见,因为您将此结构传递给该函数。
我认为你对参数如何通过指针传递给函数感到困惑。 如果你有像这样的功能
void func (int x)
{
x = 2;
}
那么传递给函数的原始变量不会改变,因为函数内部的x是来自调用者的变量的副本。
int var = 1;
func(var);
printf("%d", var); // will print 1
如果要更改变量的值,则必须编写如下函数:
void func (int* x)
{
*x = 2;
}
int var = 1;
func(&var);
printf("%d", var); // will print 2
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.