使用指针和scanf()的动态整数

时间:2014-11-21 22:35:47

标签: c pointers scanf

以下代码应该读取动态数量的整数。但是,输出令人困惑。我知道可以使用scanf("%d", &mem_p[i])来解决问题。但为什么我们不能使用mem_p++?对我来说,它说:将%d地址赋予第一个整数并递增指针。

int num_el, i;
int *mem_p;

printf("Number of elements:");
scanf("%d", &num_el);
mem_p = (int *) calloc(num_el, sizeof(int));
printf("Enter %d numbers", num_el);

for(i = 0; i < num_el; i++) {
  scanf("%d", mem_p++);
}

printf("The numbers entered was: ");
for(i = 0; i < num_el; i++) {
  printf("%d ", mem_p[i]);
}

输出:

Number of elements:
3
Enter 3 numbers
11 22 33
The numbers entered was: 1737 3 1729

1 个答案:

答案 0 :(得分:3)

如果您保留指向原始数据的指针,则可以使用它:

mem_p = (int *) calloc(num_el, sizeof(int));
int* p = mem_p ;
printf("Enter %d numbers", num_el);

for(i = 0; i < num_el; i++) {
    scanf("%d", p++);
}

然后:

p = mem_p ;
printf("The numbers entered was: ");
for(i = 0; i < num_el; i++) {
    printf("%d ", *p++ );
}

你增加了指向整个数组的唯一指针,并且在第一个for循环结束时,它不再指向数组。