为了账号安全,请及时绑定邮箱和手机立即绑定

请问下数组 int array[2] 应该只有array[0] array[1]啊

怎么会出现array[2]?  

正在回答

2 回答

这是因为int array[2]还有一个为'\0'的结束数组符,而int array[]={0,1}则没有'\0'这个结束符

0 回复 有任何疑惑可以回复我~
#1

xpsion 提问者

非常感谢!
2015-10-11 回复 有任何疑惑可以回复我~
#2

onemoo

只有字符串形成的数组才会在尾端添加一个'\0'字符,其他类型的数组不会这样。 课程中的代码是问题的!
2015-10-11 回复 有任何疑惑可以回复我~
#3

HiJacker

上上一次还是上一次的视频里面有标注:array[2]应该改为array[3],是老师做视频的时候疏忽打错了
2017-05-19 回复 有任何疑惑可以回复我~

LS的回答有问题,原因请看我给他的回复。


确实不应该有 array[2]。课程中这样的写法有严重的安全隐患。

刚看了一眼课程代码,发现他的for循环也有问题,C标准不保证a b i 与array数组在内存中紧挨着,所以for中指针p可能取到无意义值。 C标准只保证数组中的元素紧挨着。

这讲师真坑人...

1 回复 有任何疑惑可以回复我~
#1

qq_翔麟_0

不同类型不同分配,不会造成abi非紧挨的状况,分配是有一个先后顺序的,去仔细看看内存分配和GCC优化再来说话
2017-03-15 回复 有任何疑惑可以回复我~
#2

onemoo 回复 qq_翔麟_0

C标准可并没有对栈内存模型进行规定,唯一能确定的是数组中的元素是紧密相邻的,除此之外我们不能进行任何假定。 我觉得写代码应该尽可能严格地按照C标准来,不应该依赖某些编译器的行为,因为有可能在别的平台上的编译器就不是这样实现的——尤其是在C教学时更应该严谨。
2017-03-17 回复 有任何疑惑可以回复我~
#3

qq_翔麟_0 回复 onemoo

我的天诶,你打字不累么(¬_¬)
2017-03-18 回复 有任何疑惑可以回复我~
#4

onemoo 回复 qq_翔麟_0

既然是在问答平台里交流,那么我希望至少能写些有意义的回答。我不愿意给出没价值、抖机灵的回复,所以一般字数都不会太少,但还不至于累……
2017-03-19 回复 有任何疑惑可以回复我~
查看1条回复

举报

0/150
提交
取消
Linux C语言指针与内存
  • 参与学习       116475    人
  • 解答问题       250    个

指针-C语言的核心,代领大家对c语言有更加深刻的理解

进入课程

请问下数组 int array[2] 应该只有array[0] array[1]啊

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信