C++ 值传递、指针传递、引用传递详解

值传递:

形参是实参的拷贝,改变形参的值并不会影响外部实参的值。从被调用函数的角度来说,值传递是单向的(实参->形参),参数的值只能传入,

不能传出。当函数内部需要修改参数,并且不希望这个改变影响调用者时,采用值传递。

指针传递:

形参为指向实参地址的指针,当对形参的指向操作时,就相当于对实参本身进行的操作

引用传递:

形参相当于是实参的“别名”,对形参的操作其实就是对实参的操作,在引用传递过程中,被调函数的形式参数虽然也作为局部变量在栈

中开辟了内存空间,但是这时存放的是由主调函数放进来的实参变量的地址。被调函数对形参的任何操作都被处理成间接寻址,即通过

栈中存放的地址访问主调函数中的实参变量。正因为如此,被调函数对形参做的任何操作都影响了主调函数中的实参变量。

理论性的就不多说,

下面的代码对此作出了细致解释(从实参,形参在内存中存放地址的角度 说明了问题的本质,容易理解 )

复制代码
1 #include
2 using namespace std;
3 //值传递
4 void change1(int n){
5 cout<<”值传递–函数操作地址”<<&n<

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C++中的指针是一个变量,其值为另一个变量的地址。 指针变量声明需要使用星号(*),而取地址运算符&用于获取变量的地址。指针有许多用途,包括动态分配内存、在函数之间传递参数以及访问数组和字符串。 下面是一些常见的指针操作: 1. 定义指针变量 定义一个指针变量需要使用星号(*),例如: ``` int *ptr; ``` 这将定义一个名为ptr的指针变量,它可以指向一个整数值。 2. 获取变量的地址 获取变量的地址需要使用取地址运算符&,例如: ``` int var = 5; int *ptr = &var; ``` 这将把var的地址存储在ptr指针变量中。 3. 解引用指针 解引用指针意味着访问指针所指向的变量,需要使用星号(*),例如: ``` int var = 5; int *ptr = &var; // 解引用ptr指针并给变量赋值 *ptr = 10; ``` 现在var的值为10,因为ptr指向var并通过解引用指针修改了它的值。 4. 动态内存分配 动态内存分配是指在运行时分配内存,需要使用new运算符,例如: ``` int *ptr = new int; ``` 这将在堆上分配一块大小为sizeof(int)的内存,并返回其地址。可以使用delete运算符释放内存: ``` delete ptr; ``` 5. 指针和数组 数组名本质上是一个指针,它指向数组的第一个元素,可以使用指针访问数组元素,例如: ``` int arr[5] = {1, 2, 3, 4, 5}; int *ptr = arr; // 访问数组元素 cout << ptr[0] << endl; // 输出1 cout << ptr[1] << endl; // 输出2 ``` 6. 指针和函数 指针可以用于在函数之间传递参数,例如: ``` void swap(int *a, int *b) { int temp = *a; *a = *b; *b = temp; } int main() { int x = 5, y = 10; swap(&x, &y); cout << x << " " << y << endl; // 输出10 5 } ``` 在swap函数中,a和b分别是指向x和y的指针。通过解引用指针可以交换它们的值。在主函数中,使用取地址运算符&将x和y的地址传递给swap函数。 这些只是指针的一些基本概念和操作,C++中的指针还有许多高级用法,例如指向函数的指针指针数组,需要深入学习和掌握。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值