在数组中生成随机整数的函数不起作用

Function to generate random ints in array doesn't work

我的功能不起作用,不知道为什么,进入范围后就结束了。你能解释一下为什么以及如何解决它吗?我需要使用这些指向数组的指针来执行此操作。

void generate(int *pa, int *pa2);
void display(int *pa, int *pa2);

int main()
{
    srand(time(0));
    int size;
    printf("Enter size of array\n");
    scanf("%d",&size);

    int *A=(int*) malloc(size*sizeof(int));
    int *ptr=A;
    int *pa=&ptr[0];
    int *pa2=&ptr[size-1];

    generate(pa,pa2);
    display(pa,pa2);

    return 0;
}

void generate(int *pa, int *pa2)
{
    int upper,lower;
    int randi;
    printf("enter range");
    scanf("%d %d",&lower,&upper);
    for (int i = 0; i <*pa2; i++)
    {
        randi=(rand() % (upper - lower + 1)) + lower;
        *(pa+i) = randi;
    }

}

for (int i = 0; i <*pa2; i++)

您混淆了按索引迭代和迭代直到您找到指针。那是将数组末尾的值(即垃圾)与 i.

进行比较

相反,您需要比较指针 pa+1pa2。它必须是 <= 因为你确实要填写最后一项。

for (int i = 0; (pa+i) <= pa2; i++) {
    *(pa+i) = ...
}

但是去掉i直接增加一个指针更容易

void generate(int *start, int *end) {
    ...

    for(int *current = start; current <= end; current++) {
        *current = ...;
    }
}

但是既然你有大小,那么传入大小并按索引迭代会更简单。

void generate(int *array, int size) {
    ...

    for (int i = 0; i <= size; i++) {
        array[i] = ...
    }
}

并且可以简化调用函数。 A&A[0]指向同一个内存。

generate(A, &A[size-1]);