加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 局部变量的堆栈

发布时间:2020-12-16 10:43:40 所属栏目:百科 来源:网络整理
导读:void Test2(){ int c=8; int b=7; int d=9; int *a; a = b; a+=sizeof(int); //I supposed that *a should points on variable d after this cout "bt" b "t" b endl; cout "at" a "t" *a endl; cout "ct" c "t" c endl; cout "dt" d "t" d endl;}
void Test2()
{   
    int c=8;
    int b=7;
    int d=9;
    int *a; 

    a = &b;
    a+=sizeof(int); //I supposed that *a should points on variable d after this 

    cout << "bt" << &b << "t" << b << endl;
    cout << "at" << a  << "t" << *a << endl;
    cout << "ct" << &c  << "t" << c << endl;
    cout << "dt" << &d  << "t" << d << endl;
}

我认为* a应该指向变量d,因为b和d(我认为)位于局部变量堆栈附近.但*在另一个地址上有一个点,所以* a!= d
我的问题是为什么呢?它是Visual Studio 2010的功能还是别的什么?

解决方法

不,这是C的一个特征,称为未定义的行为.你不能在你拥有的数组(或数组边界上的一个位置)之外做指针算术.

你可以通过a = 1来使用它,因为a已经是一个int *,所以= 1会使它指向下一个整数. a = sizeof(int)将把sizeof(int)整数移到右边.

+------+------+------+------+------+
 |      |      |      |      |      |      
 +------+------+------+------+------+
    ^      ^                    ^
    |      |                    |
    a     a+1               a+sizeof(int) (assuming sizeof(int) == 4)

再次,从技术上讲,它是未定义的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读