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

Returning pointer to static local variable

当我编译这段代码时,

#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;
}

由于您使用 return 值的方式,它是非法的。 bar可见,可用于main()

问题在于

*foo()++;

您需要提供括号中的表达式

(*(foo()))++;

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

    *foo()++;

相当于:

    *(foo()++);

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

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

    (*foo())++;