2014-11-21 2 views
1

Следующий код должен читать динамическое число целых чисел. Однако вывод запутан. Я знаю, что проблему можно решить, используя scanf("%d", &mem_p[i]). Но почему мы не можем использовать mem_p++? Для меня это говорит: дайте %d адрес первому целому числу и увеличивайте указатель.Динамическое число целых чисел с использованием указателей и scanf()

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 

ответ

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++); 
} 

You вкл вернул единственный указатель, указывающий на весь массив, и в конце первого цикла for он больше не указывал на массив.

Смежные вопросы