【发布时间】:2019-06-23 16:56:09
【问题描述】:
我想生成 x 个随机数,一切正常,除了它给我的是序列号,而不是随机数。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(){
int x;
printf("How many elements do you want?\n");
scanf("%d", &x);
int *array = (int *)malloc(x * sizeof(int));
srand(time(NULL));
for(int y = 0; y < x; y++){
*(array + y) = 2 + rand() % 99;
}
for(int y = 0; y <x; y++){
printf("Array element %d: %d\n", y, (*array+ y));
}
return 0;}
它给出的数字如下:27 28 29 30 31,每次执行中只有第一个数字是随机的,其他数字是连续的。
【问题讨论】:
-
*(array + y)和(*array + y)不一样。如果你使用通用符号array[y],这个讨厌的错字可能就不会发生了。 -
请注意,对于任何指针或数组
p和索引i,表达式*(p + i)完全等于p[i]。后者通常更易于阅读,编写更少,并且还可以避免像您遇到的错误那样的错误。 -
*(pointer + integer)与pointer[integer]100% 完全相同。请注意,在这类表达式中使用数组标识符会隐式地从数组类型转换为指针类型。
标签: c for-loop pointers random