[問題] C語言 指標問題看不懂

看板C_and_CPP作者 (吃飯睡覺打東東)時間15年前 (2011/02/08 20:47), 編輯推噓2(2027)
留言29則, 9人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) visual c++ 6.0 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 我看不懂指標如何動作,希望各位大大能幫我解惑一下 餵入的資料(Input): a[5]={31,17,33,22,16} 預期的正確結果(Expected Output): a[5]={41,27,43,32,26} 錯誤結果(Wrong Output): 程式碼(Code):(請善用置底文網頁, 記得排版) int a[5]={31,17,33,22,16} int i,*ptr=a; for(i=0;i<5;i++) { *ptr=*(ptr++)+10;//看不懂這一段如何動作 } for(int i=0;i<5;i++) { cout<<a[i]; } 補充說明(Supplement): -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.118.75.232

02/08 20:51, , 1F
拆兩行看得懂嗎? *ptr=*ptr+10; ptr++;
02/08 20:51, 1F

02/08 20:52, , 2F
等效於 *ptr=*ptr+10; ptr++;
02/08 20:52, 2F

02/08 20:52, , 3F
把每個元素都+10
02/08 20:52, 3F

02/08 20:52, , 4F
*ptr加10然後ptr加1
02/08 20:52, 4F

02/08 20:52, , 5F
int i,*ptr=a;有錯要改成
02/08 20:52, 5F

02/08 20:52, , 6F
你會看不懂是因為這個寫法本來就不好懂
02/08 20:52, 6F

02/08 20:53, , 7F
而且因為優先度的關係, 我記得括號可以拿掉, 會更難懂
02/08 20:53, 7F

02/08 20:54, , 8F
不好意思= =我搞錯了...只是第一航少了;
02/08 20:54, 8F

02/08 20:59, , 9F
因為 ptr++ 是後置遞增
02/08 20:59, 9F

02/08 20:59, , 10F
所以在 *ptr = *( ptr++ ) + 10 ; 這行執行完畢後
02/08 20:59, 10F

02/08 20:59, , 11F
ptr 才會 +1 , 但是這裡陣列指標的加
02/08 20:59, 11F

02/08 20:59, , 12F
會解讀為一次加一個單位 ( int 4 bytes )
02/08 20:59, 12F

02/08 21:00, , 13F
int i = 0 ;
02/08 21:00, 13F

02/08 21:00, , 14F
int a[5] = { 31 , 17 , 33 , 22 , 16 } ;
02/08 21:00, 14F

02/08 21:00, , 15F
for( i = 0 ; i < 5 ; i++ )
02/08 21:00, 15F

02/08 21:00, , 16F
{
02/08 21:00, 16F

02/08 21:00, , 17F
a[i] += 10 ;
02/08 21:00, 17F

02/08 21:00, , 18F
cout << a[i] ;
02/08 21:00, 18F

02/08 21:01, , 19F
} // 如果這樣寫 不是簡單明瞭 = =
02/08 21:01, 19F

02/08 21:03, , 20F
外面的迴圈式控制次數讓指標所指內容+10後往下一個內容
02/08 21:03, 20F

02/08 21:03, , 21F
這樣嗎?
02/08 21:03, 21F

02/08 21:05, , 22F
abz大大 不好意思 我正在學習指標所以 才會用指標做XD
02/08 21:05, 22F

02/08 21:06, , 23F
而上面程式碼是書附的答案
02/08 21:06, 23F

02/08 21:07, , 24F
恩 我也只是新手等級 還要多多指教
02/08 21:07, 24F

02/08 21:07, , 25F
那樣的指標寫法 也不是錯 只是程式碼越簡單 以後越快樂
02/08 21:07, 25F

02/08 21:13, , 26F
我搞懂了 謝謝各位大大解惑
02/08 21:13, 26F

02/09 14:39, , 27F
KISS principle: Keep it simple, Stupid!
02/09 14:39, 27F

02/09 15:32, , 28F
我所知的版本怎麼沒有 Stupid @@
02/09 15:32, 28F

02/09 15:45, , 29F
02/09 15:45, 29F
文章代碼(AID): #1DKJjLVh (C_and_CPP)