2015-08-08 3 views
-1

Перейдите через следующие петли:Добавления указателей в C

Я особенно путается в первом цикле,

первого цикл:

for(i = 0; i < n; i++) 
{ 
    scanf("%d", ptr + i); 
} 
for(i = 0; i < n; i++) 
{ 
    sum = sum + (*(ptr + i)); 
} 

второго цикл:

int *x ; 
for(i = 0; i < n; i++) 
{ 
    x = ptr + sizeof(i); 
    scanf("%d",x); 
} 
for(i = 0; i < n; i++) 
{ 
    x = ptr + sizeof(i) ; 
    sum = sum + (*x); 
} 

Зачем вводить элементы в массиве с помощью malloc с использованием вышеперечисленных петель g ive же результат? Почему первая и вторая петля дают равный или правый результат?

Почему (ptr + i) и ptr + sizeof (i) работают в одном и том же состоянии?

Вся программа

#include<stdio.h> 

#include<conio.h> 

#include<stdlib.h> 

#define NULL 0 

int main() 

{ 
    int *ptr; 
    int i, n, sum = 0 ; 
    float avg ; 
    printf("Enter the number of elements you want to store in the array."); 
    scanf("%d", &n); 
    ptr = (int *) malloc(n * sizeof(int)) ; /*Dynamic Memory allocation*/ 
    if(ptr == NULL) 
    { 
     printf("The required amount of memory is not available. "); 
     getch(); 
     exit(0);                    
    } 

    else 
     { 
     printf("Enter the elements\n"); 
     for(i = 0; i < n; i++) 
      { 
       scanf("%d", ptr + i); 
      } 
     for(i = 0; i < n; i++) 
      { 
       sum = sum + (*(ptr + i)); 
      } 

     printf("\nThe sum of %d elements entered is = %d",n , sum); 
     avg = sum/n ; 
     printf("\nThe average of %d number of the array is %f", n, avg); 
     } 

     printf("\n"); 
     getch(); 

} 
+2

Как объявляется 'ptr'? – lurker

+0

'x' объявлен как' int', и вы пытаетесь разыменовать его. – mathematician1975

+0

int * x; Прошу прощения, я не входил во всю программу –

ответ

4

почему (PTR + я) и PTR + SizeOf (я) работает в так же?

Это не так. В первом примере вы читаете значения n в массив (сохраняя их в последовательных элементах), а затем добавляете значения n. Во втором примере вы читаете значения n и сохраняете их все в том же элементе массива (перезаписывая предыдущий элемент), поэтому вы получаете массив, который в основном неинициализирован, но имеет один элемент, установленный на последнее значение читать. Затем вы добавляете этот элемент к себе n раз.

Таким образом, вы можете получить с одинаковой суммой в обоих случаях (например, если ваши цифры 1,3,2), или вы не можете.

+0

Но почему ptr + i загружает элементы в нужное положение?не ptr должен хранить адрес, а не ptr + i означает, что адрес увеличивается на i раз? –

+0

Потому что 'ptr + i' вычисляет адрес элемента' i'th массива. Поэтому '* (ptr + i)' совпадает с 'p [i]'. Это то же самое, что и «адрес, увеличенный i раз» - добавление эквивалентно увеличению в несколько раз. –

+0

большое вам спасибо :) –

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