我如何固定数组的大小
How do I fix the size of my array?
大家。我正在努力理解为什么我的数字变量不断输出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,这可能会更令人困惑,因此请感谢您现在抓到它!
我同意别人所说的话。如果使用矢量,您可以继续将值推到其末端,然后让它担心更改数组的大小!
- 是否可以就地构造一个固定大小的数组作为函数参数?
- 如何在C++中将元素添加到非固定大小的数组中?
- 介于 [固定数组] 和 [带内存分配的指针] 之间的性能
- C++ - 移动具有固定大小的 c 样式数组成员的类的构造函数
- 为什么不建议使用宏符号常量定义一个固定长度的数组呢
- 如果你有一个固定大小的数组,你需要遍历它!n次,使用二进制搜索如何改变时间复杂性
- 为什么C++允许在运行时将数组大小传递给函数以构造固定大小的数组?
- 为什么std::begin()和std::end()适用于固定数组,而不适用于动态数组
- 初始化固定的 C 数组成员结构
- 将固定大小的数组更改为矢量
- 将空填充但不以空结尾的固定长度字符数组转换为 std::string 的最佳方法
- 超载操作员|用于固定尺寸的数组
- 在分配给指针到固定数组期间没有指针衰减
- 指向固定尺寸数组行为的指针
- 我如何固定数组的大小
- 固定大小和零启动数组作为C 11中的默认参数
- 对于具有固定运行时确定大小的数组,是否有标准C++类?
- 在 C++ 中为 char 数组分配固定内存
- 整数宇宙映射数组到固定范围的应用与实现
- 如何在C++中声明数组的固定大小