2015-04-04 311 views
0

我有點困惑,所以我會先解釋我的理解,希望有人能糾正我,並解釋我出錯的地方。在C中,參數是通過值傳遞的,所以如果我們想要從傳入的函數內改變指針,我們必須將參數定義爲指針指針,以便我們可以修改實際的指針比價值。如果這是正確的,是否有人可以解釋sprintf()函數如何設法更改* str指針?指針vs指針指針C

+2

A 「雙指針」 包含雙的地址。指向指針的指針包含指針的地址。 – 2015-04-04 02:59:24

+0

謝謝,糾正:-) – CaseyJones 2015-04-04 03:34:48

回答

4

sprintf函數不改變*str指針,它改變指針*str指向的數據。

實施例:

char *str = malloc(20); 
sprintf(str, "hello %s", "world"); 
// str has not changed, only the data it points to has 
+0

請您詳細說明一下嗎?謝謝:) – CaseyJones 2015-04-04 02:05:10

+0

如果* str指針改變了,那麼* str指針會指向不同的地方。它仍然指向相同的位置,只是該位置的數據發生了變化。例如,指針就像一個房子的地址,數據就像房子裏的人。 sprintf就像是替換房子裏的人。 – 2015-04-04 02:06:42