求助:c/c++数组在内存中的组织形式

#include<iostream>
#pragma pack(1)
using namespace std;
int main(){
    int i;
    int a[4]={1,2,3,4};
    for(i=0;i<=4;i++){
        a[i]=4-i;
        cout<<i<<endl;
    }
    a[4]=100;
    cout<<&i<<endl;
    cout<<&a[7]<<endl;
    return 0;
}

图片说明

按照我的理解我的代码应该是一个死循环 但是后面验证a[7]的地址和i的地址是一样的 本来认为a[4]和i地址应该一样的 我想问下那i和a数组之间的三个字节是干什么用的

全部评论
颠倒一下i和a的声明顺序就不一样了
点赞 回复 分享
发布于 2017-03-09 10:01
debug模式除了加入调试信息外其他的内存分配方式是合乎栈预期的 0.0 
点赞 回复 分享
发布于 2017-03-09 09:01
同学这个问题你解决了吗,我用vs2013,我发现我的内存好奇怪啊,在release模式下,出现了两种情况 感觉他不讲道理呀,没加数组之前是按顺序放到栈里的,加了数组之后的内存分配方式就像是堆了,我好蒙圈啊。。。
点赞 回复 分享
发布于 2017-03-09 08:54
你是在debug模式运行的吗,这样的话编译器会加入一些调试信息,两个int会隔12个字节,release模式应该就和a[4]的地址一样啦,明起来我试试,你先试试看。。
点赞 回复 分享
发布于 2017-03-08 22:39
a[4] a[7]实际上都不存在,为啥要进行比较?两个本来不存在的值有什么意义?
点赞 回复 分享
发布于 2017-03-08 22:35

相关推荐

10-01 09:50
门头沟学院 Java
肖先生~:这个人真的很好,点赞
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务