C++ 较大的超出范围的数字出现在C++;兰德()
需要有一个范围内的随机数数组。代码:C++ 较大的超出范围的数字出现在C++;兰德(),c++,random,C++,Random,需要有一个范围内的随机数数组。代码: void fillArray(int *arr){ for(int i=0;i<(sizeof arr);i++){ arr[i] = rand() % 2 - 2; } } int *arrPoint(int *arr, int max){ for (int i=0;i<max;i++){ printf("%d is %d\n",i,arr
void fillArray(int *arr){
for(int i=0;i<(sizeof arr);i++){
arr[i] = rand() % 2 - 2;
}
}
int *arrPoint(int *arr, int max){
for (int i=0;i<max;i++){
printf("%d is %d\n",i,arr[i]);
}
return arr;
}
int main(int argc, char *argv[]){
srand ( time(NULL) );
int arr_f[15];
fillArray(arr_s);
arrPoint(arr_s, 15);
system("PAUSE");
return EXIT_SUCCESS;
}
怎么回事?将rand()%2放在括号中也无济于事。这些数字是什么?我如何摆脱它们
p.S.在蹩脚的Dev-C++和Code::Blocks中尝试了这一点,得到了相同的结果。需要小尺寸的程序(放在dropbox中),所以不,我不能使用100mb的boost lib。void fillArray(int*arr){
void fillArray(int *arr){
for(int i=0;i<(sizeof arr);i++){
对于(int i=0;i在fillArray
中)(arr的大小)
是指针的大小,而不是数组的大小。数组的工作方式与您想象的不一样。您不能使用sizeof
神奇地获得数组大小。数组在作为函数参数传递时会衰减为指向其第一个元素的指针,并且必须单独提供大小信息:
int main()
{
int * arr = new int[20];
the_function(arr, 20);
//...
delete[] arr;
}
void (int * arr, std::size_t size)
{
for (std::size_t i = 0; i != size; ++i)
{
// something with arr[i]
}
}
更好的方法是,使用std::vector
省去你所有的头痛,以及你可能没有想到的更多的头痛
(我的声明有一个例外:对于本地作用域中的自动数组,intb[10]
,sizeof(b)
确实会返回10*sizeof(int)
。但这只是因为编译器知道数组大小。大小信息不会传递,并且在运行时不可用。)尝试使用\u countof(arr)
而不是sizeof(arr)
\u countof
返回数组的大小,而不是指针。请注意这一点。您的问题是sizeof
运算符。arr
是指向int
的指针,通常为4或8字节长。您必须传递数组的长度(不是以字节为单位的大小)作为函数的附加参数。rand工作正常,您仅使用它填充arrayNote的前4个元素。注意,如果使用内存调试器(如valgrind),您会立即发现此错误。如果你在看似好的代码中看到一些意想不到的东西,那么最好先调试一下。此外,arr_s和arr_f是不同的变量——arr_s是在哪里定义的?只是一个输入错误,我扔掉了一些代码。-1:(a)这是特定于Microsoft的,不可移植,更重要的是,(b)在这种情况下,它将不起作用,因为OP所拥有的只是一个指针
int main()
{
int * arr = new int[20];
the_function(arr, 20);
//...
delete[] arr;
}
void (int * arr, std::size_t size)
{
for (std::size_t i = 0; i != size; ++i)
{
// something with arr[i]
}
}