自动变量和静态变量的作用域仅限于定义它们的 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/