回答
我必须确保除非功能需要一个
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