[問題] c語言雙重pointer問題

作者: ptt0720 (濕濕)   2017-06-27 11:04:21
開發平台(Platform): (Ex: Win10, Linux, ...)
macOS
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
GCC
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
問題(Question):
我想請問一下丟&A 然後用A**去接是什麼意思?
另外我測試了**A *A A 去接
然後印出 *A **A的值都會一樣
讓我更困惑了
餵入的資料(Input):
預期的正確結果(Expected Output):
錯誤結果(Wrong Output):
console:
10
20
程式碼(Code):(請善用置底文網頁, 記得排版)
#include <stdio.h>
#include <stdlib.h>
void fun(int **A){
printf("%d\n",*A);
printf("%d\n",**A);
}
int mian(){
int a = 10;
int *A = &a;
fun(&A);
}
補充說明(Supplement):
作者: TWkobe (中華柯比)   2017-06-27 11:08:00
假設a的地址是0x100,值為10 , pointerA的地址為0x200, 值為0x100你把&A餵進去就是把0x200丟進去
作者: ptt0720 (濕濕)   2017-06-27 11:26:00
那用什麼東西接有差嗎 用**A *A A
作者: TWkobe (中華柯比)   2017-06-27 11:27:00
你可以想像**A要跑兩次所以丟0x200進去後, 他會先依照0x200找出值0x100, 再依0x100尋找得到值10, 所以丟&A後**A為10而丟&A使用*A就只有跑一次, 所以印出0x100
作者: ptt0720 (濕濕)   2017-06-27 11:31:00
感謝
作者: freeunixer (御劍客)   2017-06-27 11:35:00
你是看什麼書寫的範例?這個 code 形參、實參用得不好
作者: TWkobe (中華柯比)   2017-06-27 11:35:00
若你只是print出A , 是顯示你餵進來的pointer所儲存的內容所以依照你的範例結果為0x200
作者: freeunixer (御劍客)   2017-06-27 11:36:00
你最好不要將 main 跟 fun 的變數寫一樣,才好看出差別你的問題是沒搞清楚為什麼 main 傳 &A 進 fun(),但 fun 卻是收 (**A)...事實上,兩個 A 是不同的.將 fun 的 A 全改成 B,會比較好區分,也比較容易搞清楚
作者: alex70266 (小眼)   2017-06-29 23:44:00
其實記住C只有call by value就是了阿阿怎麼會推文到這來XDDDDD 搞笑orz
作者: zakk0610   2017-08-02 07:29:00
當你的func要改pointer的值(*p的p)時會傳**p,傳*p無法改p的值精確來講可以改值但只改到local variable

Links booklink

Contact Us: admin [ a t ] ucptt.com