-2

我传递给构造函数的数组只允许我的指针创建大小仅为 4 的数组

int* Array1;
int* Array2;
Sort::Sort(int acrray[]){
    Array1 = new int[size(acrray)]();
    cout << sizeof(*Array1);
    Array2 = new int[size(acrray)]();
    for(int index = 0; index < sizeof(acrray);index++){
         Array1[index] = acrray[index];
         cout << index << endl;
         Array2[index] = acrray[index];
    }
}

这是测试用例:

int arrays[] = {5,7,3,5,1,24,5};
Sort n(arrays);

这是我的输出: 代码输出

4

2 回答 2

2

sizeof(*Array)实际上是sizeof(int)

void foo(int acrray[]) {
    cout << sizeof(acrray);
}

将始终打印 4(或 8 在 64 位机器上)。尽管它的外观,这不是函数参数中的数组,而是一个指针。您应该为数组大小添加一个参数:

void foo(int acrray[], size_t len) ...

此外,sizeof(array)不会给你数组的长度,而是它在内存中占用的大小。

于 2013-04-26T03:26:51.957 回答
1

如果你有一个数组,那么只有当你用相同的方法创建它时,你才能写

sizeof(array) / sizeof(array[0])

获取数组中元素的数量。但是由于这仅在您以相同的方法创建它时才有效,因此毫无意义-一旦将数组传递到程序中的任何其他位置,它就会“衰减”为被视为指针类型,之后sizeof(array)将等效于sizeof(*int)(或其他你的数组的元素类型是)。因此,如果您要传递一个数组,则需要将其长度作为单独的参数传递。

为了演示数组到指针的衰减,下面的 C 代码:

int sizeofarray(int array[])
{
    return sizeof(array)/sizeof(array[0]);
}

int main()
{
    int myarray[] = {1, 2, 3};
    printf("%d\n", sizeof(myarray)/sizeof(myarray[0]));
    printf("%d\n", sizeofarray(myarray));
    return 0;
}

产生这个输出:

3
1
于 2013-04-26T03:27:08.913 回答