2011-10-24 63 views
0

考慮像const正確性 - 常量指針作爲函數參數

char* strcpy (char* destination, const char* source); 

在(地址)源給定的值是常量,因爲函數的作者想表明源的值不會改變功能通過strcpy。指針本身並沒有被strcpy改變。爲什麼不寫

char* strcpy (char* destination, const char* const source); 

非常感謝提前。

回答

0

你會看到如果你試圖實現這兩個功能,他們實際上是相同的。此時的const修飾符僅對函數的主體有意義,因爲無論如何參數都是按值傳遞的。

error: function "strcpy" has already been defined 
char* strcpy (char* destination, const char* const source) 
+0

如果我將函數體內的源設置爲NULL後發送指向目標的指針,會發生什麼? – Toru

+2

用作函數參數的本地副本'source'將被設置爲NULL,而不是傳遞給它的參數。 –

+0

好的,非常感謝! – Toru

11

指針本身是按值傳遞的,所以沒有意義。

2

它也可以這樣寫,但它不會影響調用者。

在第二種情況下,原型表示指針本身不應被修改,但調用者的指針不能被修改,因爲它在調用函數時被複制(通過值傳遞)。

通過值與const傳遞的標記變量僅對函數的實現者有用,作爲使他的意圖清晰的方式。