斯坦福大学公开课2-------数组问题 (续2)最后还是觉得jerry讲错了

gocpplua 2013-01-22 10:27:19
在第三课中Jerry Cain讲到如下代码:

int main()
{
int arr[5];
arr[3]=128;
((short*)arr)[6]=2;
cout<<arr[3]<<endl;
}

他说会输出512+128,但是我为什么输出是2,还有就是按照我自己的理解是因为int是4个字节,所以应该输出2^16+128.。


我是我用各种方法解释他输出为什么是2,结果是我认为:我没有考虑大小端模式,我们用的应该是小端,所以输出2,jerry应该是大段,而且int是2个字节,所以说输出512+128


但是最后我又发现一个问题,如果jerry的int是2位的话,那short是几位呢,应该也是两位吧,所以应该会访问越界,最后我还是觉得他说错了

我们的一些讨论大家可以看:
http://blog.csdn.net/chenqiai0/article/details/8528650
http://bbs.csdn.net/topics/390351715?page=1#post-393531841
...全文
277 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
gocpplua 2013-01-22
  • 打赏
  • 举报
回复
引用 1 楼 chuachua66 的回复:
大佬,错就错吧,也不用再开一贴吧,有时间找他其他的错误吧。
我主要是为了让大家发现我的错误,不好意思
chuachua66 2013-01-22
  • 打赏
  • 举报
回复
大佬,错就错吧,也不用再开一贴吧,有时间找他其他的错误吧。
gocpplua 2013-01-22
  • 打赏
  • 举报
回复
引用 10 楼 ljljlj 的回复:
00 00 00 00 00 00 00 00 00 00 00 00 02 00 00 00 这是内存的内容,大家说是多少? 请问老师如果用16位的int和short相等,那双何必出这样的的题呢?
yes
gocpplua 2013-01-22
  • 打赏
  • 举报
回复
引用 9 楼 ForestDB 的回复:
考虑大小端,LZ的想法基本是正确的。 Plain Text code?12345678910111213141516171819202122232425262728293031323334353637383940414243int short byte 4 9 00 00 8 00 00 3 ……
你考虑下short的长度,应该不对的把
ljhhh0123 2013-01-22
  • 打赏
  • 举报
回复
00 00 00 00 00 00 00 00 00 00 00 00 02 00 00 00 这是内存的内容,大家说是多少? 请问老师如果用16位的int和short相等,那双何必出这样的的题呢?
ForestDB 2013-01-22
  • 打赏
  • 举报
回复
考虑大小端,LZ的想法基本是正确的。

int  short byte
  4     9  00
           00
        8  00
           00
  3     7  00
           00
        6  00
           80 -> 02
  2     5  00
           00
        4  00
           00
  1     3  00
           00
        2  00
           00
  0     1  00
           00
        0  00
           00

int  short byte
  4     9  00
           00
        8  00
           00
  3     7  80
           00
        6  00 -> 02
           00
  2     5  00
           00
        4  00
           00
  1     3  00
           00
        2  00
           00
  0     1  00
           00
        0  00
           00
gocpplua 2013-01-22
  • 打赏
  • 举报
回复
引用 6 楼 derekrose 的回复:
依据程序编译器的不同short定义的字节数不同。 标准定义short短整型变量不得低于16位,即两个字节。 编译器头文件夹里面的limits.h定义了short能表示的大小:SHRT_MIN~SHRT_MAX。 在32位平台下如windows(32位)中short一般为16位。
yes
gocpplua 2013-01-22
  • 打赏
  • 举报
回复
引用 5 楼 lile1234_show 的回复:
好吧。 多谢指导~
derekrose 2013-01-22
  • 打赏
  • 举报
回复
依据程序编译器的不同short定义的字节数不同。 标准定义short短整型变量不得低于16位,即两个字节。 编译器头文件夹里面的limits.h定义了short能表示的大小:SHRT_MIN~SHRT_MAX。 在32位平台下如windows(32位)中short一般为16位。
lee_鹿游原 2013-01-22
  • 打赏
  • 举报
回复
好吧。 多谢指导~
gocpplua 2013-01-22
  • 打赏
  • 举报
回复
引用 3 楼 zhao4zhong1 的回复:
对学习编程者的忠告: 眼过千遍不如手过一遍! 书看千行不如手敲一行! 手敲千行不如单步一行! 单步源代码千行不如单步对应汇编一行! 不要迷信书、考题、老师、回帖; 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实!……
嗯嗯,谢谢忠告
赵4老师 2013-01-22
  • 打赏
  • 举报
回复
对学习编程者的忠告: 眼过千遍不如手过一遍! 书看千行不如手敲一行! 手敲千行不如单步一行! 单步源代码千行不如单步对应汇编一行! 不要迷信书、考题、老师、回帖; 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实!

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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