热心人请过来帮我。教材理解问题

hqhqhw 2007-02-03 03:19:06
包括谭的教程在内的书上都有这样一句话:c 只能对静态数组进行初始化
但是我下面的程序在tc2上能通过,请给我指点!
main()
{
int a[]={1,2,3};
printf("%d",a[1]);
}
...全文
258 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
yachong 2007-02-04
  • 打赏
  • 举报
回复
楼主看的是哪一个版本的教材?
谭的C从第二版开始好像就已经修改这种说法了
doubhor 2007-02-03
  • 打赏
  • 举报
回复
其实语法就是一些规定,如果站在编译器的角度去理解,就会好很多。

上面关于数组的初始化问题应该是不同时候的标准规定,其实现在好多编译器都并不是完全按照标准来实现的。实际使用的时候遇到这种情况可以测试一下,一切就都明白了,不是还有事实标准嘛。

动态数组是指在运行时通过动态分派内存自己管理存储空间的数组使用方法。在本质上面数组和内存没有什么本质的区别,数组就是一片内存区域而已,数组的各种运算符都是编译器在解析其行为。

bombwang 2007-02-03
  • 打赏
  • 举报
回复
静态的啊
hqhqhw 2007-02-03
  • 打赏
  • 举报
回复
看来只能强迫自己去理解这两篇了。
http://topic.csdn.net/t/20050202/16/3771403.html

http://topic.csdn.net/t/20020623/11/823999.html#
hqhqhw 2007-02-03
  • 打赏
  • 举报
回复
对不起,书上说的是静态存储数组,不是静态数组。我的问题里面少了两个字。
sycnick 2007-02-03
  • 打赏
  • 举报
回复
楼主,建议你试一下
int _tmain(int argc, _TCHAR* argv[])
{

int a[];
a[0]=1;
a[1]=2;
printf("%d",a[1]);
return 0;

}

然后再想想。
hqhqhw 2007-02-03
  • 打赏
  • 举报
回复
我说的就是谭的书。我看到别人也发了同样的帖子,但是不知道结果
hqhqhw 2007-02-03
  • 打赏
  • 举报
回复
http://dev.10026.com/c/c/20057265601_4128435.shtml

迷糊了,迷糊了
--------------------------------------------------------------------------------

发布时间: 2006-12-15 ; 上次回复: 2006-12-15; 总计回复: 23人次

--------------------------------------------------------------------------------

今天我在书上看见了段代码
main()
{
int a[10]={1,2,3,4,5};
不是说静态存储数组和外部存储数组才可作初始化赋值吗?
这样怎吗可以阿?



--------------------------------------------------------------------------------

一天一小步 [等级:◆◆(初级)] (信誉值: 100) 回复于: 2005-7-7 10:50:51 Top

我从没有听说过 “只有静态存储数组和外部存储数组才可作初始化赋值”



--------------------------------------------------------------------------------

学习 [等级:◆◆(初级)] (信誉值: 100) 回复于: 2005-7-7 10:56:10 Top

这样从a[0]到a[4]的值分别是1、2、3、4、5,下面几位都是0



--------------------------------------------------------------------------------

湘江一角 [等级:◆(初级)] (信誉值: 100) 回复于: 2005-7-7 11:00:58 Top





--------------------------------------------------------------------------------

newer [等级:◆(初级)] (信誉值: 100) 回复于: 2005-7-7 11:20:32 Top

没明白楼主的意思



--------------------------------------------------------------------------------

此人已注销 [等级:◆◆◆(初级)] (信誉值: 100) 回复于: 2005-7-7 11:32:48 Top

to 楼主:

楼主把书里的意思给误解了,并非只有静态存储数组和外部存储数组才可作初始化赋值,而是系统只对全局和静态数据进行自动初始化,而局部数据需要开发人员手动初始化,如果开发人员未进行初始化,该变量的值是随机的。



--------------------------------------------------------------------------------

mbcw [等级:◆◆◆(初级)] (信誉值: 100) 回复于: 2005-7-7 11:34:22 Top

早期的C语言不允许自动数组变量的初始化(大概是C89, 不能肯定).
C99中明确定义这种方式是合法的(肯定).
目前我所用到的C编译器都支持这种方式.




--------------------------------------------------------------------------------

哈利路亚 [等级:◆(初级)] (信誉值: 100) 回复于: 2005-7-7 14:20:07 Top

我在C语言中常见错误中看到的:
16.初始化数组时,未使用静态存储。
int a[3]={0,1,2};
这样初始化数组是不对的。C语言规定只有静态存储(static)数组和外部存储(exterm)数组才能初始化。应改为:
static int a[3]={0,1,2};

谁能给解释一下!!??




--------------------------------------------------------------------------------

正 [等级:◆(初级)] (信誉值: 100) 回复于: 2005-7-7 14:26:31 Top

回复人: hello81(哈利路亚) ( ) 信誉:100 2005-07-07 14:20:00 得分: 0


我在C语言中常见错误中看到的:
16.初始化数组时,未使用静态存储。
int a[3]={0,1,2};
这样初始化数组是不对的。C语言规定只有静态存储(static)数组和外部存储(exterm)数组才能初始化。应改为:
static int a[3]={0,1,2};

谁能给解释一下!!??

=========================================================================================
楼上的 ,你又误解了,megaboy(此人已注销) 不是已经说了吗。再理解一下 :)

=========================================================================================


回复人: megaboy(此人已注销) ( ) 信誉:100 2005-07-07 11:32:00 得分: 0


to 楼主:

楼主把书里的意思给误解了,并非只有静态存储数组和外部存储数组才可作初始化赋值,而是系统只对全局和静态数据进行自动初始化,而局部数据需要开发人员手动初始化,如果开发人员未进行初始化,该变量的值是随机的。






--------------------------------------------------------------------------------

哈利路亚 [等级:◆(初级)] (信誉值: 100) 回复于: 2005-7-7 15:52:52 Top

先谢谢各位了
还是没明白
int a[3]={0,1,2};如果这样定义,会有什马结果阿??



--------------------------------------------------------------------------------

匿名 [等级:◆(初级)] (信誉值: 100) 回复于: 2005-7-7 16:36:43 Top

结果是,如果你在接下来的一语句中写 cout<<a[0]<<a[1]<<a[2];
你会看到012

从来没听说过只有静态数组才能初始化,只听过静态形的变量必须初始化。



--------------------------------------------------------------------------------

哈利路亚 [等级:◆(初级)] (信誉值: 100) 回复于: 2005-7-7 16:46:03 Top

那不就是正确的了吗?



--------------------------------------------------------------------------------

绿果 [等级:◆(初级)] (信誉值: 100) 回复于: 2005-7-7 16:51:14 Top

一般的编译环境都支持这样!!!书上写的也有时不太对。



--------------------------------------------------------------------------------

嘉俊 [等级:◆(初级)] (信誉值: 100) 回复于: 2005-7-7 17:09:59 Top

尽信书不如无书



--------------------------------------------------------------------------------

哈利路亚 [等级:◆(初级)] (信誉值: 100) 回复于: 2005-7-7 22:24:15 Top





--------------------------------------------------------------------------------

匿名 [等级:◆(初级)] (信誉值: 100) 回复于: 2005-7-7 22:24:34 Top

.....



--------------------------------------------------------------------------------

匿名 [等级:◆(初级)] (信誉值: 100) 回复于: 2005-7-8 10:55:58 Top






--------------------------------------------------------------------------------

无烟亦如烟 [等级:◆◆◆◆(中级)] (信誉值: 100) 回复于: 2005-7-8 17:53:00 Top

书错了?
断章取义?



--------------------------------------------------------------------------------

某疯子 [等级:◆◆(初级)] (信誉值: 100) 回复于: 2005-7-8 18:02:07 Top

不是说静态存储数组和外部存储数组才可作初始化赋值吗?

谁说的?什么时候说的???



--------------------------------------------------------------------------------

哈利路亚 [等级:◆(初级)] (信誉值: 100) 回复于: 2005-7-8 18:04:22 Top

回复人: hello81(哈利路亚) ( ) 信誉:100 2005-07-07 14:20:00 得分: 0


我在C语言中常见错误中看到的:
16.初始化数组时,未使用静态存储。
int a[3]={0,1,2};
这样初始化数组是不对的。C语言规定只有静态存储(static)数组和外部存储(exterm)数组才能初始化。应改为:
static int a[3]={0,1,2};







--------------------------------------------------------------------------------

killua~~ [等级:◆(初级)] (信誉值: 100) 回复于: 2005-7-8 18:08:33 Top

小问题 也能见真章



--------------------------------------------------------------------------------

哈利路亚 [等级:◆(初级)] (信誉值: 100) 回复于: 2005-7-9 15:16:04 Top

up



--------------------------------------------------------------------------------

zhongshexiang@126.com [等级:◆(初级)] (信誉值: 100) 回复于: 2005-7-9 15:49:31 Top

lz太迷信书了,自己要实践呀



--------------------------------------------------------------------------------

三次表白被拒,从此专心写程序! [等级:◆◆(初级)] (信誉值: 100) 回复于: 2005-7-9 15:50:23 Top

孟子说:尽信书不如无书!不要太相信书上的东西,不明白的自己调试一下就明白了,实践是检验真理的唯一标准


sycnick 2007-02-03
  • 打赏
  • 举报
回复
5.4 动态数组
与固定数组对应的是动态数组,即数组元素个数不定的数组。

有时候可能不知道数组到底多大才合适,希望在运行时可以改变数组的大小(或大小不断改变),这时就要使用动态数组.

与固定数组不同的是:灵活、经济,可伸缩,这样不会浪费内存。

要创建动态数组,需要分两步进行:先预定,后决定。

hqhqhw 2007-02-03
  • 打赏
  • 举报
回复
to sycnick(李小虾) 我认为他是动态数组。
sycnick 2007-02-03
  • 打赏
  • 举报
回复
楼主,认为int a[]={1,2,3};是动态数组?
www_adintr_com 2007-02-03
  • 打赏
  • 举报
回复
他的意思大概是无法对 int* p = new int[100] 这种动态分配的数组不能初始化

69,369

社区成员

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

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