這裡是想改變鍊錶的頭指標的指向,但是為什麼這裡的形參需要是指向指標的指標呢?

時間 2021-05-31 15:24:15

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 冒號 用於延伸 引出 分類等...