1樓:天風立馬
c語言任何形式的函式形參都是傳值呼叫。
你問的問題最好自己除錯一下,驗證自己的想法,印象會更深刻。
然後好好理解這個回答的第一句話,理解之後再回頭想想你問的問題。
希望這些能幫到你。
2樓:冷杉
input output型別的引數只能傳目標的位址才能做到修改,目標是個指標,你就要傳指標的位址。
不想用二級指標做形參,也可以把返回值做output,然後形參只做為input用。
3樓:張強
對於指標,建議你不要把它看成指標,就看成一般的變數,因為指標也是乙個數,大小就是long的大小,所以可以把指標形參作為long形參傳入:
void fun(long p);
double a = 10;
doule *p = &a;
func((long)p);
完全沒有問題的,所以你的問題是,
void addBack(struct Back ** library);
也可以寫成
void addBack(long library);
使用時struct Back b;
struct Back * p = &b;
addBack((long)&p);
這兩者struct Back**和long,傳入後指標表示的位址在數值上是等價的。
當然,引數型別也可以寫成long *,或者甚至寫成void *,所以你在很多庫裡面也能看到void *的存在,它允許使用者傳入任意型別的指標,在擴充套件庫時,需要將指標轉換成自定義型別的指標再進行使用。當然至於為什麼不常用long,因為void *能讓人一眼看出來這裡應該傳入指標而不是long資料。當然,void *也可以按你的需要寫成void **或者void ***,以表示這裡應該傳入指標的指標的指標...
而不是指標。
所以上面不同引數的addBack最終都要面臨同乙個問題,只有轉換為正確的指標才能使用,比如:
void addBack(struct Back* library) {
*((struct Back**)library) = new_head;
addBack((struct Back*)&p);
所以你看,使用時既要強制型別轉換,又要再強制轉回正確的指標型別,反而是多此一舉。
4樓:陳舸
要在函式內部改變指標本身(不是指標指向的內容),那麼必須傳入指標的位址,也就是指標的指標。因為C/C++函式傳參是按值傳遞的,函式內部拿到的只是實參的拷貝(所以叫值),並不是實參本身。所以按值傳遞時函式內部是改變不了實參本身的,如果要改變的話只有傳入實參的位址才可以。
你要改變指標的指向,那就只有傳指標的位址才可以,所以就是指標的指標。
這裡是個樹洞,你有什麼想發洩的事情嗎?
我現在頭很痛,真的,生活太壓抑了,我感覺好多事情都是事與願違,現在在蓋新房子,蓋到一半,發現缺好多錢啊,買的瓷磚是熟悉人介紹的,沒事到比外出的還貴,開支比想像的超出太多了,我好想全退掉啊,我老公就是個廢物,老是想著壓榨我娘家,我不會問我父母借錢,你乙個出個軌的男人,我為了孩子繼續忍受住 但我心裡一直...
如果這裡是你們的26歲,你們想對26歲的自己說些什麼?希望陌生人可以回答完附上年齡,謝謝。
乙隻鬆鬆松 Hi 你已經26歲了,你做到了你在幕布上寫下的事情了嗎?26歲的LS,希望你已經不再迷茫,選擇另乙個城市,逃離現在的舒適區,去更寬闊的世界裡暢想翱翔。希望你可以有自己的想法,有自己的路,堅定不移的走下去。今年24歲。 前台阿姨萌萌 老老實實工作 讓貓吃好一點 千萬不要買中國產貓糧拉 看好...
日本一些歌曲名稱是《一二 三四 》的格式,這裡 是表示什麼意思呢?
對 唐逍回答的乙個小補充 有時主標題是乙個漢字詞語,波浪號之間的部分,會註明它的讀音 包括借用 一般以假名居多,也有用羅馬字的。比如 謠聲 努努 這種應可歸入 說明 類。略作總結 其實這裡波浪號的作用大體可歸為以下幾種 注意以下標點對應為中文概念及語境,方便大家理解 1 冒號 用於延伸 引出 分類等...