回答
我必須確保除非功能需要一個
const
參數函數不修改內容
,你唯一可以做的事被明確傳遞您的數據的副本,也許使用memcpy
創建。
您可以使用const
void foo(const char * pc)
這裏pc
是指針爲const char和使用pc
您不能編輯內容。
但它並不能保證你不能改變內容,因爲通過創建另一個指向相同內容的指針,你可以修改內容。
所以,這取決於你,你將如何實施它。
我必須確定該功能不會編輯內容。
什麼內容?指針指向的值是什麼?在這種情況下,你可以聲明你的函數一樣
void function(const int *ptr);
然後function()
不能改變整數ptr所指向。
如果你只是想確保ptr
本身沒有改變,不要擔心:它是按值傳遞的(因爲C中的所有東西),所以即使函數改變了它的參數ptr
,也不會影響指針中傳遞。
即使您聲明瞭您所做的功能,仍然可以更改ptr指向的值。我們可以在函數內部創建第二個指針,例如,在ptr上賦予它的內存地址,然後在那裏更改值。 –
@DanielS好吧,如果你有'void func(const int * ptr)'函數,那麼編寫'*(int *)ptr = 42;'是未定義的行爲,所以你錯了。 – 2012-11-18 11:52:43
是,
void function(int* const ptr){
int i;
// ptr = &i wrong expression, will generate error ptr is constant;
i = *ptr; // will not error as ptr is read only
//*ptr=10; is correct
}
int main(){
int i=0;
int *ptr =&i;
function(ptr);
}
在void function(int* const ptr)
PTR是恆定的,但什麼PTR指向不是恆定的,因此*ptr=10
是正確的表達!
void Foo(int * ptr,
int const * ptrToConst,
int * const constPtr,
int const * const constPtrToConst)
{
*ptr = 0; // OK: modifies the "pointee" data
ptr = 0; // OK: modifies the pointer
*ptrToConst = 0; // Error! Cannot modify the "pointee" data
ptrToConst = 0; // OK: modifies the pointer
*constPtr = 0; // OK: modifies the "pointee" data
constPtr = 0; // Error! Cannot modify the pointer
*constPtrToConst = 0; // Error! Cannot modify the "pointee" data
constPtrToConst = 0; // Error! Cannot modify the pointer
}
「在void函數(const int * ptr)中,ptr是常量,但它的指針不是常量,因此void函數中的ptr = 10(const int * ptr)是一個有效的表達式。我不認爲這是正確的。 * ptr只在這種情況下被讀取,所以你不能歸因於它。 –
@丹尼爾斯:是的,你是對的 –
@丹尼爾斯:謝謝,我編輯了我的答案。 –
- 1. 傳遞函數指針作爲參數
- 2. 傳遞函數指針作爲參數
- 3. c - 傳遞指向函數的指針
- 4. C++將指針傳遞給函數(Howto)+ C++指針操作
- 5. c傳遞指針遞歸函數
- 6. C:傳遞一個函數指針在它傳遞給函數
- 7. 數組初始化函數:傳遞數組作爲指針:C++
- 8. 如何將二維數組作爲只讀函數通過雙指針傳遞?
- 9. 傳遞一個指針作爲參數傳遞給函數
- 10. 從函數傳遞指針到函數
- 11. 傳遞仿函數的函數指針
- 12. 將函數指針傳遞給函數
- 13. 傳遞結構的數組的函數作爲指針(C)
- 14. c結構自身作爲參數傳遞到指針函數
- 15. C++更改作爲函數參數傳遞的指針值
- 16. C++傳遞函數指針作爲參數
- 17. 傳遞隱函數指針
- 18. Ç傳遞指針函數
- 19. 傳遞函數指針
- 20. C傳遞函數指針,如何?
- 21. 傳遞函數C++中的指針
- 22. 從Arduino傳遞函數指針到C++
- 23. 將指針傳遞給函數C++ SDL2
- 24. 正確傳遞函數C++的指針
- 25. C++傳遞函數作爲參數另一個函數void指針
- 26. 將C++函數作爲參數傳遞,而不使用函數指針/內聯?
- 27. 函數指針 - 參數傳遞給一個函數指針
- 28. 何時將指針的指針作爲參數傳遞給C++中的函數?
- 29. 傳遞C++函數指針到C函數
- 30. 傳遞函數指針不工作
即使你使用(const int的* PTR)作爲參數,你仍然可以改變值所指向(通過創建函數內的第二指針,例如)。 100%確定它不會改變的唯一方法就是傳遞一個值的副本。對? –
@DanielS如果它創建一個非const指針並使其指向const指針的內容,它將進入未定義的行爲區域。即它是無效的代碼。 – cnicutar
我不能使用const,我只是想確保函數使用通過指針傳遞的內容的副本。 memcpy看起來是最好的解決方案,請問你能告訴我語法嗎? – Mc128k