c - 我们如何在 C 的作用域之外访问 auto 和 static 变量?

标签 c storage-class-specifier

自动变量和静态变量的作用域仅限于定义它们的 block 。由于 Auto 变量是在堆栈中定义的,如果函数退出,堆栈将被销毁并释放 auto 变量的内存。但是我在某处读到“但是,它们也可以在它们的范围之外访问,也可以使用此处给出的指针概念,通过指向变量所在的非常精确的内存位置来访问。”这是正确的吗?

此外,静态变量是在数据部分定义的,因此它一直存在到程序结束。范围在定义它的 block 内。有什么方法可以让我们从任何其他函数访问静态变量吗?另外,有什么方法可以从任何其他文件访问静态变量吗?

最佳答案

这是一个非常简单的例子:

void print_msg(const char* msg) {
  printf("The message is: %s\n", msg);
}

int main(void) {
  char m[] = "Hello, world!";
  print_msg(m);
}

这里,m是一个自动变量,不在print_msg的范围内。但是 print_msg 显然可以访问它的值。

不要混淆“作用域”和“生命周期”。变量的范围是变量名称可见(因此可以使用)的程序部分。值的生命周期是程序执行期间值存在的时间段。范围是关于程序文本;它与编译有关。生命周期与程序执行有关。

关于c - 我们如何在 C 的作用域之外访问 auto 和 static 变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55370448/

相关文章:

c - c中静态函数的范围

c - C 中寄存器存储类的存储分配?

c++ - 为什么我们不能一直使用C中的register存储类呢?

c - 为什么寄存器数组名称可以分配给指针变量而不会出现编译器错误?

c++ - 外部存储类说明符

C程序文件-io用户输入

c - 64 位 Ubuntu 上的利用

c - scanf 直到我按 Enter 两次才接受输入

c - 如何捕获第三个dll函数中的超时异常,我在Windows中使用c语言

c - 函数 ceil() 被忽略