【问题标题】:How do I access variables in C from different functions?如何从不同的函数访问 C 中的变量?
【发布时间】:2015-05-30 14:08:12
【问题描述】:

我的问题是函数 malloc_queue() 如何在不提供任何参数的情况下从 init_queue() 访问变量

例如:

main.c:

if (init_queue()) {
    malloc_queue()
}

init_queue() 创建变量 que:

int init_queue{
    struct Queue *que;
    return 1;
}

malloc_queue() 想要对 init_queue() 中的变量 que 做一些事情:

void malloc_queue{
    struct Queue *que = (struct Queue*)malloc(sizeof(struct Queue));
    return;
}

但这不起作用,因为 malloc_queue 不知道 que 是什么。有没有任何可能的方法而不给出任何参数?

【问题讨论】:

  • 尽可能了解标识符的范围。特别是寻找文件范围
  • @user3717963 你需要重写这些函数,因为它们完全是错误的。
  • @user3717963 首先,它们在语法上定义不正确,没有任何意义。比如init_queue的任务是什么?
  • @user3717963 你的 init_queue 什么也没创建。
  • @user3717963 ,那些不会编译。你需要()

标签: c function pointers scope


【解决方案1】:

也许您想要一个 static variable 外部函数,它在其定义后在驻留文件内具有范围。

检查此代码:

#include <stdio.h>

static int x = 0;
void a() {
    x = 5;
}
void b() {
    x*=2;
}
int main(int argc, char * argv[]) {
    printf("%d\n", x);

    a();
    printf("%d\n", x);

    b();
    printf("%d\n", x);

    return 0;
}

正如 cmets 建议的那样,阅读 c 作用域。


如果您需要声明主要类型以外的结构,您可能需要将指向结构的指针声明为static variable 外部函数,然后在您的一个函数中分配内存(例如malloc())。

【讨论】:

  • 刚刚得到了答案。我现在在标题中声明变量。这是个好主意吗?
  • @user3717963 通常,标头用于常量和函数原型。首先,您应该知道变量的范围,如果它仅在单个文件中使用,则按照我的回答描述的方式声明。同样,如果您打算长期使用 c,请先阅读一本名为 Thc c progrramming language 2nd 的书。你会得到比你要求的更多的东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-22
  • 1970-01-01
  • 1970-01-01
  • 2016-09-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多