在数组中生成随机整数的函数不起作用
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+1
和 pa2
。它必须是 <=
因为你确实要填写最后一项。
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]);
我的功能不起作用,不知道为什么,进入范围后就结束了。你能解释一下为什么以及如何解决它吗?我需要使用这些指向数组的指针来执行此操作。
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+1
和 pa2
。它必须是 <=
因为你确实要填写最后一项。
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]);