int 数组 C++ 的大小

Posted

技术标签:

【中文标题】int 数组 C++ 的大小【英文标题】:Size of int array C++ 【发布时间】:2016-01-04 19:40:39 【问题描述】:

如果是整数,我正在尝试分配一个新数组(请参阅下面的 HwGrades 分配) 当我设置 HwNum=2 时,新函数只创建一个大小为 1 的数组! 当 for 循环迭代 2 次时,它不会给我访问冲突 帮助将不胜感激..

这是构造函数

EE_Course::EE_Course(int Course_ID, char * Course_Name, int Hw_Num, double Hw_Weigh,int Factor_)
    
        CourseID = Course_ID;
        CourseName = new char[strlen(Course_Name) + 1];
        strcpy(CourseName, Course_Name);
        HwNum = Hw_Num;
        HwWeigh = Hw_Weigh;
        HwGrades = new int [HwNum];  // STARTING FROM HERE
        for (int i = 0; i < Hw_Num; i++)  //UNTIL HERE
            HwGrades[i] = 0;
        
    Factor_ = 0;
    ExamGrade = 0;


这些是课程类的私有变量:

protected:
    int CourseID;
    int HwNum;
    char* CourseName;
    double HwWeigh;
    int ExamGrade;
    int* HwGrades;

;

【问题讨论】:

你怎么知道size是1? 有什么理由不能使用 std::vector?这将简化事情。 观察窗口中的@seleciii44 作为一种风格:一旦你分配给HwNum,你应该只使用它而不是交替回Hw_Num 知道!它并没有显示全部。它只显示第一个元素的地址。这就是为什么你只看到一个。如果它是一个数组(不是指针),您可以看到所有元素。 【参考方案1】:

如果它是一个指针,调试器不会显示整个数组。它显示了数组的地址和数组指向的第一个元素。所以你的代码没有问题。

如果它被定义为一个数组,你可以看到它:

int HwGrades[100]; 

如果你真的想使用指针并查看它的内容,你有两种选择:

    将其定义为数组,对其进行调试,修复/验证您的代码并返回指针。

    我不知道你是什么环境,但通常有一个内存视图选项。您可以随时检查阵列中的内容。只需打开 IDE 的内存视图并查看指针的地址。

编辑

显然还有第三种(也是最好的)选择。见Rabbi Shuki's answer。

【讨论】:

【参考方案2】:

调试器只显示一个元素。原因如下:

HwGrades 的类型是int*。那么当显示HwGrades的内容时,调试器应该怎么做呢?调试器不知道指针实际上指向数组的第一个元素。它假定它只是指向int。因此,调试器只显示数组中实际大小为 2 的第一个元素。

如果您使用的是 Visual Studio 调试器,则可以在监视窗口中写入 HwGrades,2 以查看数组的前两个元素。用你喜欢的任何东西替换2。 ;)

但是,通常我强烈建议将 STL 容器 std::vector 用于动态数组。编程将更容易,调试器将成为您的朋友,没有麻烦。

【讨论】:

哇!我很感激这个解释。谢谢。 @SijaanHallak 为您添加了一些提示。 ;)【参考方案3】:

如果您想在手表屏幕中查看数组的下一个单元格,您可以输入名称并添加逗号以及您想查看的单元格数量。

I.E.

HwGrades, 2

【讨论】:

@SijaanHallak 很高兴听到。如果您能对对您有帮助的答案投票,我将不胜感激,因为我对这个网站还很陌生,需要建立自己的声誉。

以上是关于int 数组 C++ 的大小的主要内容,如果未能解决你的问题,请参考以下文章

c++中怎样定义动态数组

C++问题:如何定义一个未知大小的一维数组,数组大小由输入的值决定

数组大小超过函数大小 (C++)

c++二维数组和二级指针

C++之动态数组

如何在 C++ 中找到数组的确切大小? [复制]