需要在范围内有一个充满随机数的数组。代码:
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;
}
输出:
0 is -2
1 is -1
2 is -2
3 is -1
4 is 0
5 is 0
6 is 4633240
7 is 2686652
8 is 1973724226
9 is 1974338216
10 is 2686716
11 is 1973744850
12 is 8
13 is 1973752206
14 is 1973752162
Press any key to continue . . .
到底是什么?将rand()%2放入括号中也无济于事。这些数字是什么,我如何摆脱它们?
P.S。在糟糕的Dev-C ++和Code :: Blocks中尝试了相同的结果。需要程序小巧(把它放到dropbox),所以不,我不能使用100mb boost lib。
答案 0 :(得分:8)
void fillArray(int *arr){
for(int i=0;i<(sizeof arr);i++){
由于arr
是指向整数的指针,sizeof arr
相当于sizeof (int *)
,在您的平台上显然为4(32位)。这显然不是你想要的。您只需将fillArray
指针传递给数组的第一个元素。
如果需要指针指向的数组中的元素数,则需要传递该信息。 C和C ++语言无法告诉指针只指向指针指向的字节数。
您可以在arrPoint
中正确执行此操作。在fillArray
中这样做。
答案 1 :(得分:3)
阵列不像你想象的那样工作。您无法使用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<int>
让你自己不必担心这些头痛,以及你可能甚至没有想过的更多头痛。
(我的陈述有一个例外:对于本地范围内的自动数组,int b[10]
,sizeof(b)
确实会返回10 * sizeof(int)
。但这只是因为编译器知道数组大小。大小信息不会传递,并且在运行时不可用。)
答案 2 :(得分:0)
在fillArray
中(sizeof arr)
是指针的大小,而不是数组的大小。
答案 3 :(得分:0)
您的问题是sizeof
运算符。 arr
是指向int
的指针,通常为4或8个字节长。您必须将数组的 length (不是字节大小)作为函数的附加参数传递。
答案 4 :(得分:-1)
尝试使用_countof(arr)
代替sizeof(arr)
。_countof
返回数组的大小,而不是指针 - 请注意这一点。