c、 消除未初始化的警告错误

c、 消除未初始化的警告错误,c,function,pointers,warnings,C,Function,Pointers,Warnings,在c中的函数myfunc1()中,我要做的第一件事是调用另一个函数myfunc2(),它总是设置指针GCC警告我可能未设置指针。我怎样才能摆脱这个警告呢 这里有一些简化的代码来演示它 int bla; void my_func2(int *ptr) { ptr = &bla; } void my_func1() { int *ptr; //ptr=0; my_func2(ptr); } 如果行ptr=0未注释,则警告消失。我不想设置变量,因为它不做任何事情

在c中的函数
myfunc1()
中,我要做的第一件事是调用另一个函数
myfunc2()
,它总是设置指针<代码>GCC警告我可能未设置指针。我怎样才能摆脱这个警告呢

这里有一些简化的代码来演示它

int bla;
void my_func2(int *ptr) {
   ptr = &bla;
}
void my_func1() {
    int *ptr;
    //ptr=0;
    my_func2(ptr);
}
如果行
ptr=0
未注释,则警告消失。我不想设置变量,因为它不做任何事情,因为
my_func2()
设置了它

gcc
警告消息为

警告:“ptr”在此函数中未初始化使用
[-Wuninitialized]


任何帮助都将不胜感激。

我想你要做的是:

int bla;
void my_func2(int **pp) {
    *pp = &bla;
}
void my_func1() {
    int *ptr;
    my_func2(&ptr);
    ...
}

my_func2
不做任何事情(可观察)。你的编译器是对的,ptr是单元化的。它设置了ptr。我说这是简化的代码。我的功能确实有作用,但没有。它设置其本地副本,然后对其不做任何操作,
my_func1
中的本地变量根本不会更改,并且保持未初始化状态。编译器是正确的,
ptr
从未设置。
func2
内部的变量
ptr
是本地变量。如果您想在main中设置一个,您必须传递func2`an
int**
并进行设置。好的,它如何设置ptr?像这样的**ptr?就是这样。谢谢大家的帮助。当我回来时,我会点击你答案的复选框。上面说我必须等6分钟。有史以来最快的答案。