以下代码应该读取动态数量的整数。但是,输出令人困惑。我知道可以使用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
答案 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循环结束时,它不再指向数组。