🧸🧸🧸🧸🧸
  • 🧸's Blog
  • CodeJam
    • Kickstart Round H 2018 A Big Buttons
    • Kickstart Round H 2018 B Mural
  • C++/C
    • CashBox Code
    • for迭代数组
    • 字符串操作
    • 在函数中,int与int&的区别
    • sizeof()
    • memset的用法
    • 传值&传引用&传指针
    • STL
  • 经典算法
    • n皇后问题
  • Java
    • servlet从网址传入参数中文乱码
  • SQL
    • 左外连接与右外连接的区别
  • API
    • DeepGTAV v2
    • VPilot
    • SantosNet
    • deepdrive
    • iceb.link API
  • Spring Boot
    • Entity实体
    • 是否加@service的区别
    • Entity内字段表中名字不能为system
由 GitBook 提供支持
在本页
  • 主程序
  • 值传递
  • 引用传递
  • 指针传递
  • 指针传递1
  • 指针传递2

这有帮助吗?

  1. C++/C

传值&传引用&传指针

主程序

#include <iostream>
using namespace std ;

void Swap(int x, int y) ;

int main(void){
  int a = 1 ;
  int b = 2 ;

  cout << "a = " << a << ", " << "b = " << b << endl ;

  Swap(a, b) ;

  cout << "a = " << a << ", " << "b = " << b << endl ;
  return 0 ;
}

值传递

void Swap(int x, int y){
  int temp = x ;
  x = y ;
  y = temp ;
}
输出结果:
a = 1, b = 2

a = 1, b = 2

原因:Swap(int x, int y)函数采用值传递的方式,传入的实参实际上是a和b的副本而非其本身,所以对副本的改变并不会反应到a和b本身上。

引用传递

void Swap(int &x, int &y){
  int temp = x ;
  x = y ;
  y = temp ;
}
输出结果:
a = 1, b = 2

a = 2, b = 1

原因:Swap(int x, int y)函数采用引用传递的方式,传入的实参实际上是a和b的引用,对引用的改变会直接反应到a和b本身上。

指针传递

指针传递1

void Swap(int *x, int *y){
  int *temp = x ;
  x = y ;
  y = temp ;
}

调用方法:Swap(&a, &b);

输出结果:
a = 1, b = 2

a = 1, b = 2

原因:Swap(int x, int y)函数采用指针传递的方式,传入的实参实际上是a和b的指针的副本,而且改变的是副本本身而非其间接引用,所以不会影响的指针所指向的值,即a和b本身上。

指针传递2

void Swap(int *x, int *y){
  int temp = *x ;
  *x = *y ;
  *y = temp ;
}

调用方法:Swap(&a, &b);

输出结果:
a = 1, b = 2

a = 2, b = 1

原因:Swap(int x, int y)函数采用指针传递的方式,传入的实参虽然也是a和b的指针的副本,但是改变的是副本的间接引用,无论是指针本身还是其副本,都指向相同的值,所以这个改变会反应到a和b本身上。

上一页memset的用法下一页STL

最后更新于6年前

这有帮助吗?