C和Java中的静态变量

前端之家收集整理的这篇文章主要介绍了C和Java中的静态变量前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有个问题:
假设我们有这个功能:(在C中)
int& f() {
    static int x = 0;
    return x;
} // OK

int& h() {
    int x=0;
    return x;
} // ERROR

为什么h会出错?是因为关键字static吗?我发现静态关键字让我的x变量在我的函数终止后生效.所以我仍然可以从外部访问该内存位置(另一个功能或主要?对吗?).而是在h终止后丢失int x = 0.对?我不确定我真的得到了它!

那Java呢?我读过我不能在方法中声明静态变量,只能在类中声明.

谢谢.

解决方法

在C中,static是该语言最重载的关键字之一.你在这里使用的意思是这样的:

在具有静态说明符的函数内定义的变量具有静态存储持续时间 – 它占用程序的整个运行时的相同空间,并在对函数的不同调用之间保持其值.因此,您可以安全地返回对它的引用,因为变量总是在那里支持引用.

函数调用返回时,正常(非静态)函数局部变量被销毁,因此引用变为悬空 – 它不引用任何有效的东西.使用它会导致未定义的行为.

Java根本没有函数范围的静态变量(它没有关键字static的含义).这就是为什么你不能在那里宣布它.

C和Java都具有static关键字的“类范围”含义.当使用static关键字声明类的成员时,这意味着该成员不绑定到该类的任何实例,而只是一个全局变量,其标识符位于类的范围内.

猜你在找的C&C++相关文章