C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – 局部变量的堆栈大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
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 << "b\t" << &b << "\t" << b << endl;
    cout << "a\t" << a  << "\t" << *a << endl;
    cout << "c\t" << &c  << "\t" << c << endl;
    cout << "d\t" << &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)

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

大佬总结

以上是大佬教程为你收集整理的c – 局部变量的堆栈全部内容,希望文章能够帮你解决c – 局部变量的堆栈所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。