static的作用

niehuawen 2012-08-22 10:32:20
//test c.cpp

#include<stdio.h>
#include "test.h"
void main()
{
print();
printf("%d",num);
}

//test.h

static int num=5; //第1处
static void print() //第2初
{
static int num=1;
printf("%d\n",num);
printf("%d\n",::num);
}

上述2处static的作用分别是什么?

...全文
212 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
wizard_tiger 2012-08-24
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

第一处,防止全局变量被其他文件引用

第二处,防止函数被其他文件引用
[/Quote]
++
xiezhunben 2012-08-23
  • 打赏
  • 举报
回复
static 修饰数据为静态变量,所谓静态变量就是从开始定义起直到程序结束它都是存在内存中的,但是他还是一个变量,所以他还是有作用域!楼主定义了一个全局的static int num = 5; 这里定义的一个全局变量而在函数中有定义了一个 static int num = 1; 这个是局部变量,在函数中直接用num由于那么就是使用的 = 1 的这个num
加上全局域操作符::访问的就是全局变量num = 5。
franzhong 2012-08-23
  • 打赏
  • 举报
回复
除了存静态区,主要限定作用域
AnYidan 2012-08-23
  • 打赏
  • 举报
回复
这些名字只在本文件内可见
lin51616780 2012-08-23
  • 打赏
  • 举报
回复
发现LZ一个问题 不要用#include 处理*.cpp文件 很不专业 然后作用其实是把文件的内容写入另一个文件 汗
proorck6 2012-08-23
  • 打赏
  • 举报
回复
一个是静态变量,一个是静态函数。
dhdahai 2012-08-23
  • 打赏
  • 举报
回复
第一处,防止全局变量被其他文件引用

第二处,防止函数被其他文件引用
didijiji 2012-08-23
  • 打赏
  • 举报
回复
static用在外部是主要是防止其他文件引用。
static用在函数内部是只能初始化一次,并且函数调用结束后不会立即销毁。
ies_sweet 2012-08-23
  • 打赏
  • 举报
回复
第一个是全局的,静态区存储
第2个是局部的,也是静态区存储

不过因为2个变量名字冲突,局部的这个在局部将全局的屏蔽了
这是一个关于命名空间的问题吧
niceguy01 2012-08-23
  • 打赏
  • 举报
回复
你好笨啊,连static都不会他的作用如果是函数的话 ,别的文件就不能访问了,不管你另外的文件有没有实用extern,要是用在了变量上面的话 ,那么这个变量同样在其他的文件上无法使用了,并且这个变量仅仅只能被初始化一次哦
要是用在了类上面的你懂得,如果用在了成员变量上面的话,我相信你也懂得,如果把它放在了字符串“”之间他就是个abc而已。
不知道我讲明白了没有,反正我是懂了,你不懂我也没有法子
赵4老师 2012-08-23
  • 打赏
  • 举报
回复
在占用内存空间较大的局部数组声明的前面加static将其从堆栈数据段挪到全局数据段即可。
BYD123 2012-08-23
  • 打赏
  • 举报
回复
好吧啰嗦一下:
static关键字作用:
1)变量,如static int a,表示a是一个静态的变量,在程序编译时就确定初值为0,并放在未初始化的数据段里,在可执行文件里不占磁盘空间;如果是static int a = 1;//(非零值),a的数据放在已初始化的数据段里,并且在可执行文件里占用4字节的磁盘空间。
在程序运行时:a的内存空间是在栈里,如果它是全局的,任何函数可以访问,如果是局部的,只有定义它的函数
可以访问。不管哪种情形,a的作用域都只在本文件内。
2)函数,如static void func(...),表示func只能在本文件内使用,拒绝其它地方extern void func(...)后,再使用。

KingWolfOfSky 2012-08-22
  • 打赏
  • 举报
回复
static可以出现在函数或变量的声明中。
在函数定义中,它只用于指定函数名不被导出到链接器。
在函数声明中,它表示被声明的函数稍后将在这个文件中按照static存储类别进行定义。
在数据声明中,它总是表示一个不导出到链接器的定义声明。
声明为这个存储类别的变量具有静态范围(和auto所指定的局部范围正好相反)
羽飞 2012-08-22
  • 打赏
  • 举报
回复
函数中的静态变量不会因为函数返回而失效
羽飞 2012-08-22
  • 打赏
  • 举报
回复
static在cpp文件中可以防止变量或函数被其它文件引用
Gloveing 2012-08-22
  • 打赏
  • 举报
回复
在这里显得没啥用啊

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧