为什么局部字符数组非要使用static关键词修饰呢?

sr388 2001-08-09 10:27:52
static char myname[100];

如果这句定义在函数中,那myname就是一个局部字符数组,书上说局部字符数组必须使用static关键词修饰。如果这句定义在所有函数外,那它就是一个全局字符数组,不必使用static修饰,因为全局变量本来就侟储在静态内存中!为什么字符数组非要存储在静态内存中呢?静态内存到底是那块区域?那位朋友能图解说明一下,小弟感激不尽!

谢谢!
...全文
373 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
SCUM 2001-08-10
  • 打赏
  • 举报
回复
差不多
sr388 2001-08-10
  • 打赏
  • 举报
回复
牧童、浮躁的菜虫,分已经给了,谢谢
sr388 2001-08-10
  • 打赏
  • 举报
回复
vcmfc(浮躁的菜虫)你说对了,我确实正在看《Programming Windows》,你的回答令我满意,但是我要如何才能把分给你,我不会给分,不好意思
Belle 2001-08-10
  • 打赏
  • 举报
回复
up的加在一起就是了
keiga 2001-08-10
  • 打赏
  • 举报
回复
不加static变量存在堆栈中
加static变量存在内存数据区中
mengliu 2001-08-10
  • 打赏
  • 举报
回复
另加,如果不是static修饰,每次函数返回后,该数据将不存在了,因为其所在的内存相当与释放了。
vcmfc 2001-08-10
  • 打赏
  • 举报
回复
如果你把它放到函数之外,任何函数都可以修改它,而放到函数内,只有函数内可以修改。
vcmfc 2001-08-10
  • 打赏
  • 举报
回复
如果你把它放到函数之外,任何函数都可以修改它,而放到函数内,只有函数内可以修改。
vcmfc 2001-08-10
  • 打赏
  • 举报
回复
楼上两位没有理解发贴者的意思,你的意思是,如下代码:
void f()
{
static char myname[100];//是不是说这里为什么要放static是不是????

....
}

你是不是在看《Programming Windows》?,我说说它的含义:
1.myname不是局部变量,正如zgce(牧童) 所说的,它是静态数据。
2.放入函数的意义是:我的这个myname,只能在f();使用,虽然它是static变量,但它的作用域是属于f();函数的,在这个函数之外是不能使用的。



phis 2001-08-10
  • 打赏
  • 举报
回复
说得好,说得对,给分!
牧童027 2001-08-09
  • 打赏
  • 举报
回复
我没有听说过局部字符数组非要放在静态数据区的说法呀?!静态数据区就是DS,按8086的规定,所有的程序所使用的内存都分为四个段,代码段CS、堆栈段SS、数据段DS、附加段ES。在C里没有用Static修饰的变量都是在运行时SS上分配的一用完就会被Delete,用它修饰的就是在程序一开始就在DS上分配的一直到程序结束才会Delete。

69,713

社区成员

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

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