【问题标题】: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 不是打印指针的正确格式说明符。

标签: c


【解决方案1】:

不要推理未定义的行为。如果没有static,它是您从函数返回的局部变量的地址。在其生命周期结束时访问局部变量会导致未定义的行为。它可能会给你正确的结果,而下一次它可能会爆炸。它是未定义的行为。

对于static,变量的生命周期超出了函数的范围。然后你可以返回它的地址并在函数外部访问它,因为生命周期现在不依赖于被调用的函数。

【讨论】:

  • 所以“静态”使变量成为全局变量??
  • @Shubhamkesarwani:它是静态的。范围和生命周期是不同的东西。不管有没有static,它都是一个局部变量。没有static 是自动局部变量,有static 是静态局部变量。
  • @Shubhamkesarwani 在这种情况下不准确。 global 变量可以通过其名称被整个代码查看/访问。 i 在这里是static,这意味着i 的值将被存储在一个地址中,并且即使在函数调用之后也保持在那里(不管i 的范围如何)
  • @Shubhamkesarwani.:具有自动存储持续时间的对象在它们执行的块的生命周期内都存在。 - 当static 关键字不存在时就是这种情况。对于静态,具有静态存储持续时间的对象在程序的整个生命周期内都存在。
猜你喜欢
  • 1970-01-01
  • 2016-03-21
  • 2013-07-29
  • 2017-06-03
  • 2017-02-26
  • 2022-11-27
  • 2016-05-29
  • 2021-07-29
相关资源
最近更新 更多