关于普通指针实参传给const指针形参的问题

killlamb1 2016-11-30 09:47:51
大家好:
今天在看c++编程思想194页,有一处不是很明白:

void t(int*){}

int main()
{
int x = 0;
const int* cip = &x;
t(cip);//错误,原因是不能传给t一个指向const的指针。

但书中的解释我没有很明白:如果想传给它(指函数t)一个指向const的指针,那么将不能防止t()会丢下这个指针所指的内容不管。
将不能防止t()会丢下这个指针所指的内容不管。。。这后半句完全没看懂啊,有哪位朋友可以帮忙解释一下呢?谢谢!
...全文
290 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ck2333 2016-12-01
  • 打赏
  • 举报
回复
const int *和 int *的区别在于给函数传达的意思不一样,如果你的变量只是int*型,那么你的函数可以改变你的变量的值,但是如果你的参数加上了const,就意味着你的指针变量所指向的地址值不能再改变,意图改变这个值,那么你的数据就会丢失。 函数的形参如果不需要改变它的值,最好声明为const类型,对于顶层const(一定要顶层const),函数会忽略掉变量的这一特性(只是对于函数来说,并不意味这个值就可以改变)。这样你在使用变量的时候,就可以避免这种问题了(但是对于变量来说,const int *变量还是不能改变)
小灸舞 2016-12-01
  • 打赏
  • 举报
回复
实参是const int的指针,而形参只是普通的int指针,如果这样能通过,岂不是在函数里可以修改指针所指向的内容了?
指针只能向更严格的方向转换,比如实参是int *,而形参是const int *是可以的
赵4老师 2016-12-01
  • 打赏
  • 举报
回复
不要纠结各种常量了,这个世界上唯一不变的就是变化。用API WriteProcessMemory还能修改正运行的其它进程的内存里面的所谓常量呢!
paschen 版主 2016-11-30
  • 打赏
  • 举报
回复
因为const int*指向的内存内容本是不可修改的,但你传给了参数为int*的函数,函数中是可以修改指针指向的内容的,所以可能导致你指针指向的内容丢失
de? 2016-11-30
  • 打赏
  • 举报
回复
const限定变量的值。
czitroad 2016-11-30
  • 打赏
  • 举报
回复
反正意思就是int * 也得声明为const 没必要咬文嚼字

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧