《C语言编程之道》上的一个小问题
发表在C语言图书答疑 2012-11-09
是否精华
版块置顶:
前日在图书馆翻阅到《C语言编程之道》,仔细阅读,收获颇丰,便借回宿舍进一步学习。
在翻阅的过程中发现问题如下:
说法一(第50页):
/*
例4.19 使用变量表示数组长度产生的错误
#include<stdio.h>
void main()
{
   int i,max;
   int ts=5;
   int temp[ts]={20,12,40,31,25};
   ....
   ....
    printf("数组temp的最大值为:%d\n",max);
}
上面的代码运行程序后,显示了错误信息,如图所示....
2.陷阱的分析
 在进行数组定义时,数组的长度要使用常量或者符号常量,不可以使用变量。C语言不允许对数组的长度做动态的定义。
3.陷阱的解决方法
const int ts=5;
int temp[ts]={20,12,40,31,25};
*/
说法二(第73页):
倒数第10行
/*
const限定的对象通常是运行时不能被赋值的对象,因此用const限定的对象的值并不是一个真正的常量,不能用作数组维度等。
例如:
   const int n=10;
   int a[n];
根据上面的讲解可知道,上面这两行代码有问题,不能使用const定义的常量来做数组的维度。
*/

由此可见,前后两个说法是矛盾的。说法一认为可以通过在数据类型前面加上const来使得代码得以运行,说法二又认为const不能用来定义一个数值来做数组的维度。
经过测试const来定义数组长度并没有报错,不由心生困惑,望贵刊能解答我。谢谢!
分享到:
精彩评论 1
过冬的松鼠
学分:0 LV1
TA的每日心情
Q
2021-01-03 22:18:14
2012-11-14
沙发
读者朋友您好。关于第二种说法是依照ANSI C(美国标准C语言)的规定作为参考的。实质上各个编译器支持的c标准有区别,但是使用C语言都倾向于ANSI C.本书上使用const数据(可以认为是“只读”变量)初始化数组维数没有报错,可能是使用了vc++ 6等编译器。他们对ANSI的支持不是太好,因为c++中没有这种限制。而在Turbo C等编译器中则不能这样做,只能使用真正的常量初始化数组维数。
值得注意的是,作为只读变量(cosnt修饰的),可以通过指针来修改该它的值,在后边的章节中您应该能了解它的原理。
希望能够帮助到您。
首页上一页 1 下一页尾页 1 条记录 1/1页
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照