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