可以在C中全局访问指针吗?

时间:2014-08-12 19:37:17

标签: c pointers scope

我是否可以从任何功能访问指针而无需从main()向每个功能发送信息?我试过寻找信息但找不到答案。

4 个答案:

答案 0 :(得分:2)

你试过吗?

是的,你可以,但是using lots of global variables is not a good idea

答案 1 :(得分:0)

如果指针作为参数传递给函数,或者它被声明为全局,那么是。

答案 2 :(得分:0)

是的,你可以,因为变量的地址 - 它是她自己在内存空间中的唯一标识符,就像大城市中的住宅地址一样。例如,出于调试原因,它可能非常有用(你唯一应该确定的 - 这个变量的实时范围,因为当变量离开她的范围时 - 指向这个地址的指针不再有效)。

答案 3 :(得分:0)

正如其他人所说:有充分的理由不使用很多全局变量("代码的位置"很有用),但在某些情况下,小心使用全局变量是合理的。一个例子可能会有所帮助:

// A slightly contrived example to show how and when you 
// might use a global variable in a C program.
#include <stdio.h>
#include <stdlib.h>

// The following are compile-time constants, and considered
// good coding practice
#define DEBUG_WARN 1
#define DEBUG_ERROR 2

// The following is a global, accessible from any function,
// and should be used cautiously.  Note the convention (not
// universally adopted) of prefixing its name with "g_"
int g_debug_threshold = 0;

// debug_print() uses the global variable to
// decide whether or not to print a debug message.
void debug_print(char *msg, int level) {
  if (level >= g_debug_threshold) {
    fprintf(stderr, "%s\n", msg);
  }
}

void foo() {
  debug_print("hi mom", DEBUG_WARN);
}

int main(int ac, char **av) {
  // Here we set the debug threshold at runtime
  if (ac > 1) {
    g_debug_threshold = atoi(av[1]);
  }
  foo();
}