Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 初始化为非本地指针后从函数返回指针_C_Pointers_Scope - Fatal编程技术网

C 初始化为非本地指针后从函数返回指针

C 初始化为非本地指针后从函数返回指针,c,pointers,scope,C,Pointers,Scope,我认为我所做的是安全的,但我想先和你们这些聪明人核实一下 我知道从函数返回指向局部变量的指针是不好的 但是,如果指针被分配到函数调用之外并作为输入传入,该怎么办呢。然后在函数调用内部生成一个本地指针,初始化为输入指针,用于设置一些struct->members,然后returned 下面是一个使用(int*)而不是我的代码(struct type.*)的示例: 由于new\u p\u x是使用p\u x初始化的,p\u x的生命周期与modify\u p\u x函数调用无关,因此该代码是否安全

我认为我所做的是安全的,但我想先和你们这些聪明人核实一下

我知道从函数返回指向局部变量的指针是不好的

但是,如果指针被分配到函数调用之外并作为输入传入,该怎么办呢。然后在函数调用内部生成一个本地指针,初始化为输入指针,用于设置一些
struct->members
,然后
return
ed

下面是一个使用
(int*)
而不是我的代码
(struct type.*)
的示例:

由于
new\u p\u x是使用
p\u x
初始化的,
p\u x
的生命周期与
modify\u p\u x
函数调用无关,因此该代码是否安全


谢谢。

本地指针没有问题;问题在于返回指向本地对象的指针。回想一下这是为什么不好:当函数返回时,该对象使用的内存可以重新用于其他对象


modify\u p\u x
被赋予一个指向
x
(在
main
中分配)的指针,使用它来更改
x
,并返回该指针,该指针
main
然后重新分配给
p\u x
。除了它的使用方式外,这与使用
int
s而不是指针没有什么不同,而且我认为您从未担心过返回
int
变量。

这不是代码审查站点!您在使用该代码时遇到过任何问题吗?(我看没问题)。注意:始终启用编译器警告。您的原始前提已经错误。“我知道从函数返回本地指针是不好的”?谁告诉你的?“返回本地指针”本身并没有什么不好的地方。事实上,指针本身是否是本地的完全无关。唯一重要的是指针指向的对象的“局部”程度。对不起,我的意思是返回指向局部变量的指针。从函数返回后,局部变量不再存在。
int *modify_p_x(int *p_x)
{
    int *new_p_x = p_x;
    *new_p_x = 100;
    return new_p_x;
}

int main(int argc, char **argv)
{
    int x = 42;
    int *p_x = &x;

    p_x = modify_p_x(p_x);

    return 0;
}