在下面的代码中,静态的作用是啥? [复制]

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中静态和非静态内部类之间的非语法区别是啥? [复制]

无法理解Service Locator实现中的引用类型/引用复制

这个静态结构的目的是啥?

如何使用静态方法初始化静态变量? [复制]

Singleton类的优势是啥? [复制]

这段代码中的“”是啥,它的基本作用是啥?