C中的指针需要解释这个微小的代码

kok*_*ici 3 c pointers pass-by-reference

#include <stdio.h>

int* func()
{
    static int a = 5; /* line 5 */
    printf("%d\n",++a);
    return &a; /* line 7 */
}

int main(void)
{
    int *b = func(); /* line 12 */
    (*b)++;
    func();
}
Run Code Online (Sandbox Code Playgroud)

这是编码作业的测试代码示例,因此不一定是最佳的.我有基本的c ++和Java知识,但是这些是C中的指针,我遇到了麻烦.

  1. func()的返回类型是指针,但它返回整数的地址(第7行).整数是静态的(第5行)是否必须对此做任何事情?

  2. 第12行实际上做了什么?

此代码的输出是:

6

8

hac*_*cks 5

整数是静态的(第5行)是否必须对此做任何事情?

是.否则返回指向自动局部变量的指针将调用未定义的行为.

static程序终止时,局部变量的生命周期结束.因此,它的内存位置被分配到程序结束,因此可以返回它的位置.

该行(*b)++;取消引用指向的值b,然后将该值递增1.