看板 NCTU-STAT98G 關於我們 聯絡資訊
#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