请完成以下循环:
我对第一个循环感到特别困惑,
第一圈:
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();
}
答案 0 :(得分:4)
为什么(ptr + i)和ptr + sizeof(i)同样工作?
他们不是。在第一个示例中,您将n
值读入数组(将它们存储在连续元素中),然后添加这些n
值。在第二个示例中,您读取n
值并将它们全部存储在数组的相同元素中(覆盖前一个元素),因此最终得到一个大多数未初始化的数组,但是有一个元素设置为最后读取的值。然后,您将该元素添加到自身n
次。
所以你可能在这两种情况下都会得到相同的金额(例如,如果你的数字是1,3,2),或者你可能没有。