本文是个人笔记,仅用于学习分享,素材来自青岛大学王卓老师的教学视频,如有侵权,请留言作删文处理。
📚 Week02_07_线性表的定义和特点
📚 C++ 参数传递:按值传递
📌 把实参的值传送给函数局部工作区相应的副本>中,函数使用这个副本执行必要的功能。
📌 函数修改的是副本的值,实参的值不变。
#include <iostream>
void swap(float m, float n)
{
float temp;
temp = m;
m = n;
n = temp;
}
int main()
{
float a, b;
std::cin >> a >> b;
swap(a, b);
std::cout << a << b << std::endl;
return 0;
}
📚 C++ 参数传递:传地址方式(指针变量作参数)
📌 形参变化影响实参
#include <iostream>
void swap(float *m, float *n)
{
float temp;
temp = *m;
*m = *n;
*n = temp;
}
int main()
{
float a, b;
float *p1, *p2;
std::cin >> a >> b;
p1 = &a;
p2 = &b;
swap(p1, p2);
std::cout << a << b << std::endl;
return 0;
}
📌 形参变化不影响实参??
#include <iostream>
void swap(float *m, float *n)
{
float * temp;
temp = m;
m = n;
n = temp;
}
int main()
{
float a, b;
float *p1, *p2;
std::cin >> a >> b;
p1 = &a;
p2 = &b;
swap(p1, p2);
std::cout << a << b << std::endl;
return 0;
}
📚 C++ 参数传递:传地址方式(数组名作参数)
📌 传递的是数组的首地址
📌 对形参数组所做的任何改变都将反映到实参数组中
#include <iostream>
#include <stdio.h>
#include <string.h>
void sub(char b[])
{
strcpy(b, "world");
}
int main()
{
char a[10] = "hello";
sub(a);
std::cout << a << std::endl;
return 0;
}
#include <iostream>
void sub(char b[])
{
// 这里直接运行会报错
b[] = "world";
}
int main()
{
std::char a[10] = "hello";
sub(a);
std::cout << a << std::endl;
return 0;
}
用数组作函数的参数,求 10 个整数的最大数
#include <iostream>
#define N 10
int max(int a[]);
int main()
{
int a[10];
int i, m;
for(i = 0; i < N; i++)
std::cin >> a[i];
m = max(a);
std::cout << "the max number is:" << m << std::endl;
return 0;
}
int max(int b[])
{
int i, n;
n = b[0];
for(i = 1; i < N; i++)
if(n < b[i])
n = b[i];
return n;
}
📚 C++ 参数传递:传地址方式(引用类型作参数)
❓ 什么是引用?
🔖 引用:它用来给一个对象提供一个替代的名字。
#include <iostream>
int main()
{
int i = 5;
int &j = i;
i = 7;
std::cout << "i = " << i << "j = " << j << std::endl;
}
j 是一个引用类型,代表 i 的一个替代名 i 值改变时,j 值也跟着改变,所以会输出 i = 7,j = 7.
#include <iostream>
void swap(float &m, float &n)
{
float temp;
temp = m;
m = n;
n = temp;
}
int main()
{
float a, b;
std::cin >> a >> b;
swap(a, b);
std::cout << a << b << std::endl;
return 0;
}
📌 引用类型作形参的三点说明
😊(1) 传递引用给函数与传递指针的效果是一样的,形参变化,实参也发生变化。
😊(2) 引用类型作形参,在内存中并没有产生实参的副本,它直接对实参操作;而一般变量作参数,形参与实参就占用不同的存储单元,所以形参变量的值是实参变量的副本。因此,当参数传递的数据量较大时,用引用比用一般变量传递参数的时间和空间效率都好。
😊(3) 指针参数虽然也能达到与使用引用的效果,但在被调函数中需要重复使用 " *指针变量名 " 的形式进行运算,这很容易产生错误且程序的阅读性较差,另一个方面,在主调函数的调用点处,必须用变量的地址作为实参。
学习笔记最后有微信公众号:惟CPP,欢迎关注,一起交流学习进步~