无论更改值或用户输入,为什么我的动态数组总是大小为2?

时间:2016-11-19 23:43:03

标签: c++

大家好,我不知道为什么这总是给我2个大小。我是新手使用动态数组。 这是我的代码:

#include <iostream>
#include <iomanip>

using namespace std;

int main(){

    int x;
    int *arr = NULL;
    cout << "Enter size of array: ";
    cin >> x;
    arr = new int[x];

    int n = sizeof(arr)/sizeof(arr[0]);

    cout << n << endl;

}

1 个答案:

答案 0 :(得分:2)

arr是指向int的指针。 sizeof(arr)将始终返回指针的大小(它不依赖于指向的数据),在您的体系结构上,它显然是sizeof(int)的两倍。

int * arr = nullptr;
size_t ptr_before_alloc = sizeof(arr);
arr = new int[1024];
size_t ptr_after_alloc = sizeof(arr);
assert(ptr_before_alloc == ptr_after_alloc); // this is guaranteed

如果你想在某处传递用new[]分配的数据,你需要单独传递大小,或者更好的是,使用像std::vector这样的容器来为你做这件事。