看板 C_and_CPP 關於我們 聯絡資訊
假設整數陣列arr宣告為 int arr[5]={54,22,44,18,01}; 試宣告一個指向整數的指標ptr指向陣列arr,然後利用指標的算術運算 ,將陣列arr裡每一個元素的值加上10,並列印出結果。 #include <stdio.h> #include <stdlib.h> int main(void) { int arr[5]={54,22,44,18,01}; int i,*ptr=arr; for(i=0;i<5;i++) *ptr=*(ptr++)+10; <====這行我看不懂再說什麼意思 printf("運算後陣列的內容為"); for(i=0;i<5;i++) printf("%d ",arr[i]); printf("\n"); system("pause"); return 0; } -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.251.0.70 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1428824569.A.E49.html ※ 編輯: elohacp4 (111.251.0.70), 04/12/2015 15:43:22
penknifelee: 這句可以分成兩段:*ptr=*ptr+10; ptr++;04/12 16:24
penknifelee: 因為前面讓ptr = arr 所以一開始*ptr的值就是arr[0]04/12 16:25
penknifelee: 因此*ptr=*ptr+10; 就是把arr[0]上的值加1004/12 16:26
penknifelee: 然後ptr++; 就是把ptr往下移一格,例如從arr[0]移到04/12 16:28
penknifelee: arr[1]的位置,以此類推arr[0]~arr[4]04/12 16:28
謝謝你。 ※ 編輯: elohacp4 (114.45.147.90), 04/12/2015 20:39:16
zxc1020305: 不過這句應該犯了十三誡的第8項,拆開來寫比較不會出 04/12 21:47
zxc1020305: 錯。可以看看置底文章。 04/12 21:48
OPIV: 依我的理解,這應該沒有犯第8戒吧! 04/13 22:30
OPIV: 因為ptr++更改的對象是ptr,而*ptr += 10更改的是*ptr 04/13 22:32
OPIV: 這句也可以寫成*(ptr++)+=10; 04/13 22:34