作者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