文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

在C++指针传递引用和Const关键字

2024-12-03 00:27

关注

以前,当我们将参数传递给函数时,我们一般使用普通变量,这称为pass-by-value方法。但是因为传递给函数的变量有可以出现超出了范围的问题,这样我们实际上无法修改参数的值。

引用传递

引用传递是指通过引用将参数传递给函数。调用时,该函数可以通过使用传入的引用来修改参数的值。

这使我们能够:

以下代码显示了传递引用的示例。调用函数时,引用参数用实际参数初始化:

  1. #include  
  2.  
  3. using namespace std; 
  4.  
  5. void swap(int &i,int &j){ 
  6.   int temp = i; 
  7.   i = j; 
  8.   j = temp
  9.  } 
  10.  
  11.  
  12. int main(){ 
  13.  int a = 100; 
  14.  int b = 200; 
  15.  swap(a,b); 
  16.  cout << a << endl; 
  17.  cout << b << endl; 
  18.  

请注意,int &i和int &j是函数的参数swap()。

当swap()被调用时,变量a和的值b将被修改,因为它们是通过引用传递的。输出将是:

  1. 200 
  2. 100 

下面有一个函数被调用triple(),有一个main()我们调用了triple()两次。大家认为这段代码会输出什么?

  1. #include  
  2.  
  3. int triple(int i) { 
  4.   i = i * 3; 
  5.   return i; 
  6.  
  7. int main() { 
  8.   int num = 1; 
  9.   std::cout << triple(num) << "\n"
  10.   std::cout << triple(num) << "\n"

函数Triple()的参数是int i,所以它在这里是通过值传递的;传入的参数num不会被修改。

因此输出为

将参数从 更改int i为int &i。现在正在做引用传递而不是值传递。你认为这现在会输出什么?

  1. #include  
  2.  
  3. int triple(int &i) { 
  4.   i = i * 3; 
  5.   return i; 
  6.  
  7. int main() { 
  8.   int num = 1; 
  9.   std::cout << triple(num) << "\n"
  10.   std::cout << triple(num) << "\n"

在第一次调用Triple()之后,num从1修改为3。因此,当第二次调用Triple()时,输出为9。

因此输出为

使用 Const 传递

const关键字告诉编译器,这样的变量不会改变的。

比如:double const pi = 3.14;。如果我们尝试更改pi,编译器将抛出错误。

有时,我们const在函数中使用参数;这是当我们知道我们想要编写一个函数,其中参数不会在函数内部更改的事实时。下面是一个例子:

  1. int triple(int const i) { 
  2.   
  3.   return i * 3; 
  4.   

在这个例子中,我们没有修改i. 如果在函数内部triple(),i更改了 的值,则会出现编译器错误。

因此,为了节省不修改参数值的函数的计算成本,我们实际上可以更进一步并使用const引用:

  1. int triple(int const &i) { 
  2.   return i * 3; 

const 确保参数不会改变。但是,通过&i引用参数,可以节省制作参数的计算成本。

下面有一个函数被调用,square()并且有一个main(),我们调用square()两次。

  1. #include  
  2.  
  3. using namespace std; 
  4.  
  5. int triple(int const &i) { 
  6.   return i * 3; 
  7.  
  8. int main(){ 
  9.  int a = 100; 
  10.  cout << triple(a) << endl; 
  11.  cout << triple(a) << endl; 

因此输出为

  1. 300 
  2. 300 

由于我们没有修改函数中的参数,再次运行代码,输出应该是一样的

 

来源:Python之王内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯