用指针尝试我的数组,但它不起作用

时间:2013-04-26 03:19:15

标签: c++ arrays pointers

我传入构造函数的数组只允许我的指针创建只有大小为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);

这是我的输出: Code Output

2 个答案:

答案 0 :(得分:2)

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

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

将始终打印4(或64位计算机上的8)。这不是函数参数中的数组,尽管它看起来像是指针。你应该为数组大小添加一个参数:

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

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

答案 1 :(得分: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