C语言中关于static的问题

#include<stdio.h>voidmain(){staticinta[11][11],m,n,t;a[0][0]=1;for(m=0;m<10;m++){for(... #include<stdio.h>
void main()
{
static int a[11][11],m,n,t;
a[0][0]=1;
for(m=0;m<10;m++)
{for(n=0;n<=m;n++)
{a[m][n]=a[m-1][n-1]+a[m-1][n];
printf("%5d",a[m][n]);}
printf("\n");
}
}
为什么语句“static int a[11][11],m,n,t;”
中如果少了一个static,程序输出的值为随机数?
展开
 我来答
简单又奔放灬福音8
2008-08-19 · TA获得超过538个赞
知道答主
回答量:572
采纳率:0%
帮助的人:0
展开全部
胡说八道。

这道题中发生了内存越界。 m=0和n=0时 m-1会是-1 会出现 a[-1]。

加上了static会把a编译在数据段中。这样越界后旁边是未初始化的数据,还是0。

但如果不加,a会被编译进代码段中。这样a前后可能会有程序代码,结果a[-1]就不是0。

第一个数就错了,后面就全错了。

这是个大问题,不要这么做。

不加static那些数也不是随机的,每次都一样。不信你去试。汇编高手也可以推算出是什么。
xingyan126
2008-08-19 · 超过21用户采纳过TA的回答
知道答主
回答量:86
采纳率:0%
帮助的人:45.4万
展开全部
static是声明静态存储
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友b91c2e1d2
2008-08-19 · TA获得超过299个赞
知道答主
回答量:176
采纳率:0%
帮助的人:0
展开全部
static是声明静态存储,分配内存时给变量(包括数组元素)赋初值0.
如果没有static,为动态存储,变量值为随机值
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
礼霜jm
2008-08-19
知道答主
回答量:39
采纳率:0%
帮助的人:0
展开全部
static是声明静态存储,分配内存时给变量赋初值0.
如果没有static,为动态存储,变量值为随机值
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
洋蕊线念
2019-10-22 · TA获得超过3.6万个赞
知道大有可为答主
回答量:1.4万
采纳率:32%
帮助的人:712万
展开全部
表示的是静态变量,即在一个过程运行完毕之后变量没有被释放掉
下次使用时值仍是上次的值,有些像全局变量
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式