| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 617 人关注过本帖
标题:书上讲的错了吗?为什么没人回答啊
只看楼主 加入收藏
linx218
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2006-12-10
收藏
 问题点数:0 回复次数:9 
书上讲的错了吗?为什么没人回答啊

上一将次我提出了静态数组和外部数组初始化问题 书本上讲只有静态数组和外部数组可以初始化,但本人用下面程序调试时,却发现自动数组也可以初始化,不知道什么原因,望各位高人能给与指点,在此先谢谢了.
int main(void)
{
int i,ch[5]={1,2,3,4,5};
add(ch);           /*第一次调用*/
for(i=0;i<5;i++) printf("%3d ",ch[i]);
printf("\n");
add(ch); /*第二次调用*/
for(i=0;i<5;i++) printf("%3d ",ch[i]);
printf("\n");
getch();
return 0;
}

int add(int *s)
{
int i;
static int a[5]={1,2,3,4,5};
for(i=0;i<5;i++)
{
s[i]+=a[i]; a[i]++;
}
return 0;
}

当add函数中a数组定义为static(静态)时,执行结果为:
2 4 6 8 10
4 7 10 13 16
即在第二次调用add时,a数组的值保持了上一次调用后的值.但当不使用static时,同样可以初始化,但结果却为:
2 4 6 8 10
3 6 9 12 15
也就是说第二次调用时没有保持第一次调用后的值,而是重新初始化了,这不说明自动数组也可以初始化吗?

2006-12-29 13:30
smartwind
Rank: 1
等 级:新手上路
威 望:1
帖 子:277
专家分:0
注 册:2006-11-13
收藏
得分:0 
我不知道你看的书上是怎么写的
我看到的是静态数组和全局数组变量可以自动初始化

2006-12-29 14:39
linx218
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2006-12-10
收藏
得分:0 

是吗,但谭浩强的书上也写的是"只有静态数组和外部数组可以初始化",当然不初始化时各元素自动初始化为0.

2006-12-29 21:47
kelifei
Rank: 1
来 自:UESTC
等 级:新手上路
帖 子:89
专家分:0
注 册:2006-5-11
收藏
得分:0 

   LZ提到的其实是一个代码块作用域的静态变量.
    
    这些 static变量和没有static的自动变量具有相同的作用域,但是当包含这些变量的函数完成工作时,它们并不象没有static的自动变量一样消失.

    也就是说一次函数调用到下一次,计算机都记录这它们的值.


-DFAE -DESS -DDVD -DMTK  -DDVR -DDECODE -DMSTAR -DPMP我决定在论坛潜水3年又3年!
2006-12-29 22:38
剑风曲
Rank: 1
等 级:新手上路
帖 子:69
专家分:0
注 册:2006-11-16
收藏
得分:0 

不明白楼主什么意思.

static变量调用后保留值,也就是保留存储空间.第一次凋用add用到了a[i]++语句,所以第2次调用的时候每个数都加了1.
auto变量调用后,在函数结束时释放存储空间,再次调用时重新分配空间.所以以前的a[i]++已经无效了.

2006-12-30 12:01
linx218
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2006-12-10
收藏
得分:0 

上楼的解释是对的,书本上是自动数组变量不能被初始化,而调试程序时是可以初始化的,不知道是不是书上讲错了.

2006-12-30 20:25
剑风曲
Rank: 1
等 级:新手上路
帖 子:69
专家分:0
注 册:2006-11-16
收藏
得分:0 
谭书是有很多错误的,不用管他,不过我去借了一本谭书看了看,没找到你说的这句话.

谭自己也搞不懂C语言的,而且书写得超级烂,想找个东西都找不到的.写书一点构架都没有,完全想到什么写什么.而且错误连篇,有兴趣可以去看看网上强人发的帖子好象叫"谭书前50页的错误",里面列举了N多小错误.
C语言的书,还是C手册比较专业一点吧.一些老外的书也不错,谭根本不能算专家的,最多算一个会C的程序员,他可以说杂而不精,说是说很多语言都会,其实一个都不会.
2006-12-30 20:36
wu350026
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2006-11-15
收藏
得分:0 
s[i]+=a[i]; 即s[i]=s[i]+a[i]是干什么用的
2006-12-30 23:47
何必天才
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2006-12-15
收藏
得分:0 
同意五楼

我只会C和PC
2006-12-31 06:48
zhou
Rank: 1
等 级:禁止发言
帖 子:429
专家分:0
注 册:2006-6-16
收藏
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽
2008-03-30 14:31
快速回复:书上讲的错了吗?为什么没人回答啊
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.028081 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved