• 数组


    数组表示一类数据的集合

    #include<iostream>
    
    int main()
    {
        int example[5];
        int *ptr = example;
        for (int i = 0; i < 5; ++i)
        {
            example[i] = 2;
        }
        example[2] = 5;
        *((int*)((char*)ptr + 8)) = 6;
    
        std::cin.get();
    }

    在强制类型转换那一行代码加上断点进行调试,输入首地址example查看内存

     可以看到四个字节为一组,组成了数组example的内存地址

     按下f10后发现example[2]中的值改变了

     因为char是字符类型,一个字节(byte),int整型4字节,所以将整型指针ptr进行强制类型转换,转换成字符型时,想要访问原来数组的第三个元素,就要在首地址的基础上向后移动2个int大小的空间,也就是8个char的空间,然后再强转回int进行赋值。

    #include<iostream>
    
    int main()
    {
        int example[5];//在栈上建立
        int *another = new int[5];//在堆上建立,生命周期不同上面数组,需要用delete删除
        delete[] another;
        std::cin.get();
    }

    以内存的方式来看这两种方法的不同,new int[5];这种方式更像是间接存储,example直接就是数组首地址,但是another不是,another是一个指针,指向后面申请的五个连续内存地址的首地址。

    #include<iostream>
    
    class Entity
    {
    public:
        int example[5];
        Entity()
        {
            for (int i = 0; i < 5; i++)
            {
                example[i] = 2;
            }
        }
    };
    int main()
    {
        Entity e;
    
        std::cin.get();
    }

    此时输入"&e"可以直接看到内存中的数组,所有的值经过构造函数都赋值为2

    用new来新建数组

    #include<iostream>
    
    class Entity
    {
    public:
        int *example=new int[5];
        Entity()
        {
            for (int i = 0; i < 5; i++)
            {
                example[i] = 2;
            }
        }
    };
    int main()
    {
        Entity e;
    
        std::cin.get();
    }

    进入调试,输入&e来查看内存,发现内存中存储的并不是5个2,而是一串地址

     这就是example中存储的,new新申请的五个内存空间的首地址,输入这个地址进行查看,看到了new int[5]中存储的5个2

     数组长度不可以是变量,只能使用常量,要让编译器直到这是一个不可变的值,c++11中可以使用标准数组类型(array)类型来定义数组

    #include<iostream>
    #include<array>
    
    class Entity
    {
    public:
        static const int exampleSize = 5;
        int example[exampleSize];
    
        std::array<int,5> another;//c++11
    
        Entity()
        {
            for (int i = 0; i < another.size(); i++)
            {
                another[i] = 2;
            }
        }
    };
    int main()
    {
        Entity e;
    
        std::cin.get();
    }
  • 相关阅读:
    什么是Swap Chain【转自MSDN】
    【转】Foobar 2000设置replay gain
    openGL library下载地址
    C++函数返回含堆数据的对象时,内存释放问题
    [原]VS2008安装boost的lib库
    【转】水木社区VIM版版友推荐插件列表
    Css学习总结(1)——20个很有用的CSS技巧
    Css学习总结(1)——20个很有用的CSS技巧
    Git学习总结(2)——初识 GitHub
    Git学习总结(2)——初识 GitHub
  • 原文地址:https://www.cnblogs.com/wangtianning1223/p/12692080.html
Copyright © 2020-2023  润新知