在下面的代码中,静态的作用是啥? [复制]
Posted
技术标签:
【中文标题】在下面的代码中,静态的作用是啥? [复制]【英文标题】:In this below code what is the role of static? [duplicate]在下面的代码中,静态的作用是什么? [复制] 【发布时间】:2018-05-26 11:12:47 【问题描述】:如果我删除这个“静态”,那么什么都不会打印出这背后的原因是什么?
#include<stdio.h>
int *fun();
int main()
int *p;
p=fun();
printf("Address=%u\n",p);
printf("Value at that address=%d\n",*p);
return 0;
int *fun()
static int i=1;
return (&i);
【问题讨论】:
printf("Address=%u\n",p);
- 这已经无效。 %u
不是打印指针的正确格式说明符。
【参考方案1】:
不要推理未定义的行为。如果没有static
,它是您从函数返回的局部变量的地址。在其生命周期结束时访问局部变量会导致未定义的行为。它可能会给你正确的结果,而下一次它可能会爆炸。它是未定义的行为。
对于static
,变量的生命周期超出了函数的范围。然后你可以返回它的地址并在函数外部访问它,因为生命周期现在不依赖于被调用的函数。
【讨论】:
所以“静态”使变量成为全局变量?? @Shubhamkesarwani:它是静态的。范围和生命周期是不同的东西。不管有没有static
,它都是一个局部变量。没有static
是自动局部变量,有static
是静态局部变量。
@Shubhamkesarwani 在这种情况下不准确。 global
变量可以通过其名称被整个代码查看/访问。 i
在这里是static
,这意味着i
的值将被存储在一个地址中,并且即使在函数调用之后也保持在那里(不管i
的范围如何)
@Shubhamkesarwani.:具有自动存储持续时间的对象在它们执行的块的生命周期内都存在。 - 当static
关键字不存在时就是这种情况。对于静态,具有静态存储持续时间的对象在程序的整个生命周期内都存在。以上是关于在下面的代码中,静态的作用是啥? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
Java中静态和非静态内部类之间的非语法区别是啥? [复制]