青岛大学_王卓老师【数据结构与算法】Week02_07_类C语言有关操作补充2_学习笔记

本文是个人笔记,仅用于学习分享,素材来自青岛大学王卓老师的教学视频,如有侵权,请留言作删文处理。

王卓老师 数据结构与算法第 02 周第 07 个原视频链接

📚 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,欢迎关注,一起交流学习进步~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值