关于const形参的使用

sky-ck 2010-12-04 05:54:53
定义const的指针将不能修改指针指向的值,但是可以修改传递给指针的那个变量的值。例如程序1
程序1
#include<iostream>
using std::cin;
using std::cout;
using std::endl;
int main()
{
int a(10),b(20);
const int* _INT1=&a,*_INT2=&b;
cout<<*_INT1<<*_INT2<<endl;

a=90,b=80;
cout<<*_INT1<<*_INT2<<endl;
}
程序2
#include<iostream>
using std::cin;
using std::cout;
using std::endl;
int main()
{
int a(10),b(20),c;
const int* _INT1=&a,*_INT2=&b;
cout<<*_INT1<<*_INT2<<endl;

int _FUNCTION(const int,const int);
cout<<a<<b<<_FUNCTION(a,b)<<endl;
a=90,b=80; //这句话并没有修改const形参的值,只是修改了传递给指针的那个变量的值。为什么这句老是报错呢?
cout<<a<<b<<endl;
return 0;
}
int _FUNCTION(const int j,const int k)
{
int d=j+k;
return d;
}
...全文
235 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
紫色动力 2010-12-04
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 kisshujinwen 的回复:]

再次学习const
[/Quote]
我也是啊!!
kisshujinwen 2010-12-04
  • 打赏
  • 举报
回复
再次学习const
yxhmm 2010-12-04
  • 打赏
  • 举报
回复
学习一下。
sghdls 2010-12-04
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 i_point2011 的回复:]

引用 5 楼 q191201771 的回复:
程序2没有报错吧,
另外int _FUNCTION(const int j,const int k)
这种写法是完全没有意义必要的
jk本来就是局部变量,出了这个函数就没了

为什么没必要呀?
[/Quote]


如果不想改变j和k的值, 就有必要定义成const

如果j和k改不改变无所谓的话, 那就没必要定义成const
sky-ck 2010-12-04
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 q191201771 的回复:]
程序2没有报错吧,
另外int _FUNCTION(const int j,const int k)
这种写法是完全没有意义必要的
jk本来就是局部变量,出了这个函数就没了
[/Quote]
为什么没必要呀?
sky-ck 2010-12-04
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 sghdls 的回复:]
引用 8 楼 i_point2011 的回复:

#include<iostream>
using std::cin;
using std::cout;
using std::endl;
int main()
{
int n=10,m=90;
int *q=&amp;n,*w=&amp;m;
cout<<*q<<*w<<endl;
int _sum(const……
[/Quote]呵呵,谢谢
sghdls 2010-12-04
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 i_point2011 的回复:]

#include<iostream>
using std::cin;
using std::cout;
using std::endl;
int main()
{
int n=10,m=90;
int *q=&n,*w=&m;
cout<<*q<<*w<<endl;
int _sum(const int *j,const int ……
[/Quote]

这个代码的 n 和 m 重定义了, 把第二个 n和 m 前面的int去掉
sky-ck 2010-12-04
  • 打赏
  • 举报
回复
#include<iostream>
using std::cin;
using std::cout;
using std::endl;
int main()
{
int n=10,m=90;
int *q=&n,*w=&m;
cout<<*q<<*w<<endl;
int _sum(const int *j,const int *k);
int summ=_sum(q,w);
cout<<summ<<endl;

int n=200,m=999;
cout<<n<<m<<endl;
}
int _sum(const int *j,const int *k)
{
int summ=*j+*k;
return summ;
}
这样写出错
漫步者、 2010-12-04
  • 打赏
  • 举报
回复
不允许改变const定义的值!
zy020118 2010-12-04
  • 打赏
  • 举报
回复
不知道楼主报什么错啊,我这运行表示正确啊
你用的什么环境呢。。。
就想叫yoko 2010-12-04
  • 打赏
  • 举报
回复
程序2没有报错吧,
另外int _FUNCTION(const int j,const int k)
这种写法是完全没有意义必要的
jk本来就是局部变量,出了这个函数就没了
sghdls 2010-12-04
  • 打赏
  • 举报
回复


程序1的问题:

楼主要搞清楚, 变量a和b, 没有被const绑定, 所以可以修改a和b的值.
而指向const int对象的指针_INT1和_INT2 , 因为两个指针都是const int型指针,所以他们指向的对象无法通过指针来修改.
比如: 楼主 把a=90 , b=80, 这句改成: *_INT1 = 90, *_INT2 = 80; 这样编译器就会报错,因为这个是通过指针修改对象数值.
sky-ck 2010-12-04
  • 打赏
  • 举报
回复
也就是说在调用函数_FUNCTION(const int,const int)的时候,形参已经将a,b限定为const了,之后就是不能对const对象进行更改?
程序改成这样就能通过了
#include<iostream>
using std::cin;
using std::cout;
using std::endl;
int main()
{
int a(10),b(20),c;
const int* _INT1=&a,*_INT2=&b;
cout<<*_INT1<<*_INT2<<endl;

int _FUNCTION(const int*,const int*);
cout<<a<<b<<_FUNCTION(&a,&b)<<endl;
a=90,b=80;
cout<<a<<b<<endl;
return 0;
}
int _FUNCTION(const int* j,const int* k)
{
int d=*j+*k;
return d;
}
qq120848369 2010-12-04
  • 打赏
  • 举报
回复
a,b是本身而已,指向它们的const指针被受限与a,b有点联系也没有.

你可以理解为:const int *表示不能修改,int a相当于int *p,是可以修改的.
arong1234 2010-12-04
  • 打赏
  • 举报
回复
你这个说法只适用于const char*,const int*之类的指针,a,b本身并不是指针,又何来“只是修改了传递给指针的那个变量的值”

64,687

社区成员

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

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