首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在C中没有指针的情况下检索超出作用域的静态变量的值?

如何在C中没有指针的情况下检索超出作用域的静态变量的值?
EN

Stack Overflow用户
提问于 2020-12-31 22:45:36
回答 2查看 121关注 0票数 2

我正在尝试解决Effective C第二章中的练习1,它说:

“向清单2-6中的计数示例添加检索函数,以检索计数器的当前值”

清单2-6中的代码是:

代码语言:javascript
运行
复制
#include <stdio.h>

void increment(void) {
    static unsigned int counter;
    counter++;
    printf("%d ", counter);
}

int main(void) {
    for (int i = 0; i < 5; i++) {
        increment();
    }
    return 0;
}

我尝试了几件事都失败了,我不明白如何检索计数器的值,因为在增量函数的外部它超出了作用域,并且没有可以使用的指针。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-12-31 23:39:34

我将counter和检索或更新其值的函数分开。为此,我将counter转移到文件作用域,并使其对其他翻译单元不可见(即static):

代码语言:javascript
运行
复制
static unsigned int counter;

void increment(void) {
    counter++;
}

unsigned int getCounter() {
    return counter;
}


// usually in a separate translation unit
int main(void) {
    for (int i = 0; i < 5; i++) {
        increment();
        printf("%d ", getCounter());
        
    }
    return 0;
}
票数 5
EN

Stack Overflow用户

发布于 2020-12-31 23:01:00

使用return,您可以这样做:

代码语言:javascript
运行
复制
#include <stdio.h>

unsigned int increment(void)
{
    static unsigned int counter;
    counter++;
    return counter;
}

int main(void)
{
    for (int i = 0; i < 5; i++)
    {
        printf("%u ", increment());
    }
    return 0;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65522309

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档