我试图理解 C 中范围的确切含义。我能理解的是范围仅限于编译时间。例如,如果您从其他函数访问局部变量。这将导致编译时错误。另一方面,以下程序可以正常工作。这意味着 C 具有平坦的内存模型,并且可以在运行时访问任何内容。C 书籍将作用域与生命周期和变量可见性联系起来,我发现它很混乱。我认为所有这些术语仅在编译时才有意义。有人可以照亮它吗?
#include "stdio.h"
int *ptr;
int func(void)
{
/** abc is a local variable **/
int abc = 132;
ptr = &abc;
return 0;
}
int func1(void)
{
/** although scope of abc is over still I can change the value in the address of abc **/
*ptr = 200;
printf("the value of abc=%d\r\n",*ptr);
}
int main(void)
{
func();
func1();
return 0;
}
结果:abc
=200的值
用简单的话来说,范围是什么意思?它是在运行时还是编译时出现的?正如我们所见,我们可以在运行时访问任何东西。但是,如果我们不遵守规则,那么我们就会得到编译错误。例如,另一个函数中的局部变量引用。编译器会抛出一个错误,说“变量未定义......”。
我可以说以下关于变量的内容吗?
1) Scope attribute comes under compile time.
2) Lifetime attribute comes under run-time.
3) Visibility attribute comes under compile-time