作者markoo (上行下笑阿..)
看板NCTU-STAT98G
标题0721 统算 section 4.cpp
时间Tue Jul 21 12:40:43 2009
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
int i,n;
int sum1,sum2;
int *z,*y;
printf("Input Array Size:");
scanf("%d",&n);
z = (int *) malloc (n*sizeof(*z));
/* 宣告指标变数*z为int形态, z此时代表记忆体位址,
*z代表其值为int形态, 这边sizeof(*z)=sizeof(int)=4,
所以也可以经由n*sizeof(*z)来配置记忆体空间 */
for (i=0;i<n;i++) z[i] = i;
y = z;
printf ("Memory Address of z = %x \n", z);
printf ("Memory Address of z+1 = %x \n", z+1);
printf ("Memory Address of y = %x \n", y);
printf ("Memory Address of y+1 = %x \n", y+1);
/* 这边可以直接将z的记忆体位址直接分配给y
此时注意z与y分享同一组记忆体位址, 所以y值跟z值会同时变动*/
sum1=0; sum2=0;
for( y=z;y<&z[n];y++) sum1 += *y;//a
for( y=z;y<z+n;y++) sum2 += *y;//b
/* a回圈与b回圈,是在执行同一件事:
z+i跟&z[i] 都是指向同一记忆体位址, 所以for回圈的解读为,
从最小的位址y=z (或y=&z[0])每一次回圈执行y++ (跳到下组记忆体位址)
直到y<z+n (或y<&z[n]) 不成立为止.
每次回圈内, y的位址一直往後更新, 其值*y则逐次累加,
以下把结果显示出来:*/
printf ("Using Pointer calculate the SUM = %d \n", sum1);
printf ("Using Pointer calculate the SUM = %d \n", sum2);
return 0;
}
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.113.7.248