区别1:指针传递和引用传递是以不同的方式实现相同的效果,但是指针传递的本质还是值传递,只是传递的值是地址。

就拿 交换两个数的函数来举例:

// 指针传递
void swap(int * val1, int * val2)
{
int temp;
temp = *val1;
*val1 = *val2;
*val2 = temp;
} // 引用传递
void swap_numbers(int & val1,int & val2)
{
int temp;
temp = val1;
val1 = val2;
val2 = temp;
}

调用上面两个函数都可以实现 val1 和 val2 的值的交换。

int first = , second = ;

swap_numbers(first,second); // 传递引用,也就是别名

int a,b;

swap(&a,&b); // 传递指针,也就是地址

但是,归根到底,指针是储存了值的地址的值,也还是实现了值传递。

而引用传递,传入的是变量名称,相当于在交换函数内部使用了外部变量的别名,操作的依然是变量本身。

区别2:指针传递相对于引用传递更灵活,也就更不受约束。

如果把引用传递类比为指针传递开辟了新的变量存储了别名的相关信息的话,那么,指针传递的地址的值是可变的,同时,该地址空间中存储的值也是可变的;而引用传递却是和别名是捆绑,不可再指向其他的地址空间的。

引用本质上就是一个 const 指针,但是两者有一定的差别,不能互换使用。

总之,引用传递作为 C++ 区别于 C 语言的一种特性,使得传参更为灵活,方便,还避免了指针使用易出错的情况。

详细的引用传递和指针传递的引用可以 参考博客:

C++中引用传递与指针传递区别(进一步整理) - - ITeye博客

最新文章

  1. easyui datagrid 编辑模式详解
  2. mac上执行sed的编辑 -i命令报错sed: 1: "test.txt": undefined label ‘est.txt’或sed: 1: "2a\test\": extra characters after \ at the end of a command
  3. 如何在 IIS 上搭建 mercurial server
  4. java操作spark1.2.0
  5. 【转】makefile语法规则
  6. 【转】iOS25彩票 幸运转盘
  7. MyBatis使用DEMO及cache的使用心得
  8. java基础练习 5
  9. 自然语言处理高手_相关资源_开源项目(比如:分词,word2vec等)
  10. Spring 框架系列之事务管理
  11. MYSQL Statement violates GTID consistency: Updates to non-transactional tables can only be done in either autocommitted statements or single-statement transactions, and never in the same statement as
  12. (二叉树 递归) leetcode 145. Binary Tree Postorder Traversal
  13. 准备在electron上用vue,结果卡在了sqlite3
  14. 原来的ALL IN ONE架构,快速的演进成为SOA架构
  15. 保存chrome主题背景的图片
  16. AngularJS transclude 理解及例子
  17. [PC]可用于Windows Server 2008 R2的Xbox One手柄、接收器驱动
  18. Foreda8上安装CMake2.8.1.2
  19. Python入门-内置函数二
  20. 26_线程池_ThreadPoolExecutor

热门文章

  1. MVC下的cshtml和aspx页面
  2. Head First Python之人人都爱列表(1-初识Python)
  3. Slf4j MDC 使用和 基于 Logback 的实现分析
  4. Android Tablayout属性介绍
  5. Sublime Text 2插件推荐
  6. 百度图片API
  7. 关于MVC刷新页面会两次请求页面的原因
  8. Docker 镜像的制作和使用
  9. 转载:ResultMap和ResultType在使用中的区别
  10. 321. Create Maximum Number (c++ ——> lexicographical_compare)