在C中添加指针

时间:2015-08-08 16:25:08

标签: c pointers

请完成以下循环:

我对第一个循环感到特别困惑,

第一圈:

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输入数组中的元素 使用上面的循环给出相同的结果? 为什么第一个和第二个循环给出相同或正确的结果?

为什么(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();

}

1 个答案:

答案 0 :(得分:4)

  

为什么(ptr + i)和ptr + sizeof(i)同样工作?

他们不是。在第一个示例中,您将n值读入数组(将它们存储在连续元素中),然后添加这些n值。在第二个示例中,您读取n值并将它们全部存储在数组的相同元素中(覆盖前一个元素),因此最终得到一个大多数未初始化的数组,但是有一个元素设置为最后读取的值。然后,您将该元素添加到自身n次。

所以你可能在这两种情况下都会得到相同的金额(例如,如果你的数字是1,3,2),或者你可能没有。