问题引入:
很多同学都会问,老师,如果一个自定义函数不需要直接修改某个变量的原值,就不需要传指针?
代码展示:
#include <iostream>
//1
void add(int num) {
num++;
}
//2
void add(int *num) {
(*num)++;
}
//3
int addnum(int num){
return ++num;
}
int main() {
int a = 3;
int b = 4;
std::cout <<a << std::endl;//3
add(a);
//再次打印值,没有被改变
std::cout <<a << std::endl;//3
std::cout <<b << std::endl;//4
add(&b);
//再次打印值,原值被改变
std::cout <<b<< std::endl;//5
int c = 20;
std::cout <<c << std::endl;//20
std::cout <<addnum(c) << std::endl;//21
return 0;
}
/*
1 和 2区别 虽然都是void返回类型 但是 1 产生了副本值,原值没有被改变,此时1的返回类型为void 所以无意义
1 和 3区别 虽然都是值传递,但是3才有意义,因为他有一个新的值可以用
*/
深度剖析:
这个程序很好地展示