我如何固定数组的大小

How do I fix the size of my array?

本文关键字:数组 何固定      更新时间:2023-10-16

大家。我正在努力理解为什么我的数字变量不断输出1.我试图随时使尺寸增加一倍,元素的数量等于数组的大小,但最终我没有接近代码的那部分。

#include <iostream>
#include <string>
using namespace std;
int main()
{
    int selection;
    int size = 2;
    // Initializing the array
    int *dArray;
    int v = 0;
    int i, j, temp;
    dArray = new int[size];
    dArray[0] = 2;
    dArray[1] = 3;
    int numbers = sizeof(dArray) / sizeof(dArray[0]);
    do {
        // Printing the menu
        cout << "1) Print Elements" << endl;
        cout << "2) Add Element" << endl;
        cout << "3) Delete Element" << endl;
        cout << "4) Return Size" << endl;
        cout << "5) Exit" << endl;
        cout << "Enter your selection number: ";
        cin >> selection;
        switch (selection)
        {
        case 1:
            // Outputting the elements
            for (int i = 0; i < size-1; i++) 
            {
                cout << dArray[i] << ", ";
            }
            cout << dArray[size - 1] <<endl;
            cout << numbers << endl;
        break;
        case 2:
            // Asking for another element
            cout << "What number shall be put into the array? n";
            cin >> v;
            if (numbers== size)
            {
                // If the size is too small...
                int *nArray = new int[2 * size];
                for (int i = 0; i < size; ++i)
                {
                    nArray[i] = dArray[i];
                }
                delete[] dArray;
                dArray = nArray;
                // Finished creating a new array
                cout << "Array size expanded to " << 2 * size << endl;
                // Adding the element
                dArray[size] = v;
                size = 2 * size;
                // Sorting the elements
                for(i=0;i<numbers;i++)
                {
                    for(j=i+1;j<numbers;j++)
                    {
                        if(dArray[i]>dArray[j])
                        {
                            temp =dArray[i];
                            dArray[i]=dArray[j];
                            dArray[j]=temp;
                        }
                    }
                }
            }
            else
            {
                // Adding the element
                dArray[size] = v;
                size = 2 * size;
                // Sorting the elements
                for(i=0;i<numbers;i++)
                {
                    for(j=i+1;j<numbers;j++)
                    {
                        if(dArray[i]>dArray[j])
                        {
                            temp =dArray[i];
                            dArray[i]=dArray[j];
                            dArray[j]=temp;
                        }
                    }
                }
            }
        break;
        }
    } while (selection!= 5);
    cin.get();
    cin.ignore();
    return 0;
}

有人知道为什么大小的功能继续以这种方式行事?

这是不是数组的大小。它是指针的大小,除以int的大小。

int numbers = sizeof(dArray) / sizeof(dArray[0]);

这是您程序中数组的大小。

int numbers = size;

sizeof(dArray)为您提供dArray的大小。dArray定义为int *dArray,因此其大小为sizeof(int*)。不管指针指的是什么,情况都不会改变。这与实际数组不同。您的尺寸代码可以与int dArray[3];合作。

要获取数组的大小,只需使用您的size变量即可;这就是分配的int对象的数量。

更好,使用std::vector<int>;size()成员函数告诉您它具有多少元素。

int numbers = sizeof(dArray) / sizeof(dArray[0]);

数字正在解决1,因为darray是指向数组开始的指针,而不是数组本身。当您调用sizeof((时,您会得到指针的大小,而不是数组。在32位应用程序上,指针为32位(4个字节(,您的第一个int也为32位(4个字节(。那么,这个说法的决心是

int numbers = 4 / 4;

离开1.如果您宣布了双打数组,则sizeof(darray [0](为8,但指针的大小仍然为4,因此该语句将决定到数字= 4/8 = .5 = .5 = .5,但是由于数字是一个INT,它将仅解析为0。因此您的代码仍会破裂,但是以新的激动人心的方式。

有趣的是,如果您将其编译为64位应用程序大小(darray(为64位(8个字节(,因此您会按预期获得数字= 8/4 = 2。然后,您将阵列大小加倍,并且代码会破坏,因为数字可以分辨到2,这可能会更令人困惑,因此请感谢您现在抓到它!

我同意别人所说的话。如果使用矢量,您可以继续将值推到其末端,然后让它担心更改数组的大小!