【C++】几种数值传递方式(值传递、指针传递、引用传递)

本文详细介绍了C++中几种不同的参数传递方式:值传递时,函数内部的修改不会影响原始变量;指针传递可以修改指向的值,但指针本身的修改需区分是否为常量指针;指向常量的指针只能读取不能修改;指针本身为常量则指针地址不可变但可修改其指向的值;同时,引用传递允许直接修改原变量的值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.值传递

#include<iostream>
using namespace std;

void printNumber(int n)
{
    n = 10;
    cout << n <<endl;
}

int main()
{
    int m = 5;
    printNumber(m);
    return 0;
}

 打印结果:10

打印出的值为函数内部的形参n的值,即10。而外部的实际参数m的值仍然是5,因为在值传递中,函数内部对形参的修改不会改变原始变量的值。

2.指针

(1)修改指针指向的值

#include<iostream>
using namespace std;

void printNumber(int* n)
{
	*n = 10;
	cout << *n << endl;
}

int main()
{
	int m = 5;
	printNumber(&m);
	return 0;
}

打印结果:10

printNumber(&m)把“5”的地址给了指针n,*n = 10修改了这个地址里的数,把它从5变成了10。

(2)修改指针

#include<iostream>
using namespace std;

void printNumber(int* n)
{
	int k = 10;
	n = &k;
	cout << *n << endl;
}

int main()
{
	int m = 5;
	printNumber(&m);
	return 0;
}

打印结果:10

printNumber(&m)把5的地址传给了指针n,n指向5所在的地址;

n = &k 又把k的地址给了n,n指向k的地址,*n为10。

3.指向常量的指针

#include<iostream>
using namespace std;

void printNumber(const int* n)
{
	int k = 10;
	n = &k;
	cout << *n << endl;
}

int main()
{
	int m = 5;
	printNumber(&m);
	return 0;
}

打印结果:10

const int* n 说明n指针指向的数为常量,不可以更改,可以这么看:把int去掉,const (*n),const 修饰*n,*n是数值,前面加上const自然是指向的数值为常量。

但是n指针不是常量,可以修改。

4.指针本身为常量

#include<iostream>
using namespace std;

void printNumber( int* const n)
{
	*n = 10;
	cout << *n << endl;
}

int main()
{
	int m = 5;
	printNumber(&m);
	return 0;
}

打印结果:10 

int* const n 说明指针n本身为常量,这个指针不能改,但是指针指向的地址里的数可以改。

可以这么看:* (const n),const修饰的是指针n。
5.指针本身和指向的数值均为常量

#include<iostream>
using namespace std;

void printNumber( const int* const n)
{
	//*n = 10;
	cout << *n << endl;
}

int main()
{
	int m = 5;
	printNumber(&m);
	return 0;
}

打印结果:5

这个自然既不能修改指针本身,也不能修改它指向的数值。

6.引用传递

#include <iostream>
using namespace std;

void printNumber(int& n)
{
    n = 10;
    cout << n << endl;
}

int main()
{
    int m = 5;
    printNumber(m);
    return 0;
}

打印结果:10 

引用传递和值传递区别在于:

可以这么理解,值传递是把自己的数值复制了一份,并把复制的那一份传给了printNumber(),所以即使printNumber()对数值进行了修改,也不影响本体;但是引用传递就不一样了,是把自己地址给printNumber(),那printNumber()内修改当然就是修改本体。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值