C++ rand()中出现大量超出范围的数字

Arn*_*hor 0 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[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;
}    
Run Code Online (Sandbox Code Playgroud)

输出:

    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 . . .
Run Code Online (Sandbox Code Playgroud)

我勒个去?将rand()%2放入括号中也无济于事.这些数字是什么,我如何摆脱它们?

PS在糟糕的Dev-C++和Code :: Blocks中尝试了这个结果.需要程序是小型的(把它放到Dropbox),所以不,我不能使用100mb boost lib.

Dav*_*rtz 8

void fillArray(int *arr){
    for(int i=0;i<(sizeof arr);i++){
Run Code Online (Sandbox Code Playgroud)

因为arr是一个指向整数的指针,sizeof arr相当于sizeof (int *)你平台上的4(32位).这显然不是你想要的.您只需将fillArray指针传递给数组的第一个元素.

如果需要指针指向的数组中的元素数,则需要传递该信息.C和C++语言无法告诉指针只指向指针指向的字节数.

你正确地做到了arrPoint.这样做fillArray.