gpt4 book ai didi

c - 返回指向静态局部变量的指针

转载 作者:太空宇宙 更新时间:2023-11-04 05:17:18 25 4
gpt4 key购买 nike

当我编译这段代码时,

#include <stdio.h>

int *foo();

int main()
{
*foo()++;
return 0;
}

int *foo()
{
static int bar;
return &bar;
}

Clang 显示错误:

static2.c:7:8: error: expression is not assignable

为什么它是非法的?我想 bar 有静态存储持续时间,所以它的生命周期是程序的整个执行。虽然 bar 本身对 main() 不可见,但指针应该能够修改它。

这个版本的 foo() 也不起作用,Clang 给了我同样的错误:

int *foo()
{
static int bar;
static int* ptr = &bar;
return ptr;
}

最佳答案

由于运算符优先级(后缀递增,++,高于取消引用,*)(参见 http://en.cppreference.com/w/cpp/language/operator_precedence),

    *foo()++;

相当于:

    *(foo()++);

这是无效的,因为 foo 的返回值是一个指针,而 foo() 计算为一个临时指针。您不能递增或递减临时指针。

您可以使用以下方法修复它:

    (*foo())++;

关于c - 返回指向静态局部变量的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35284228/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com