• C嘎嘎 - 函数与指针


    1. 函数定义

        返回值类型、函数名、参数列表、函数体语句、return 表达式。

    1. 返回值类型 函数名(参数列表)
    2. {
    3. 函数语句体
    4. return 表达式
    5. }

    2. 值传递

        值传递,就是函数调用时实参将数值传入给形参。值传递时,形参发生变化,并不影响实参。

    1. void swap(int n, int m){
    2. int temp = n;
    3. n = m;;
    4. m = temp;
    5. }
    6. int main() {
    7. int n = 0;
    8. int m = 1;
    9. cout << n << endl; // 0
    10. cout << m << endl; // 1
    11. swap(n, m); // 执行该函数后,n和m的值没有改变
    12. cout << n << endl; // 0
    13. cout << m << endl; // 1
    14. return 0;
    15. }

    3. 指针

    (1)作用:可以通过指针直接访问内存。指针就是一个地址。

    (2)指针变量的定义和使用

        01 定义语法:数据类型 * 指针名;

    1. int a = 10;
    2. int * p;
    3. p = &a; //让指针记录变量a的地址

        02 使用指针:通过解引用的方式来找到指针指向的内存(即在指针的前面加*)

    1. int a = 10;
    2. int * p;
    3. p = &a;
    4. cout << &a << endl; //0x82
    5. cout << p << endl; //0x82
    6. *p = 1000; //改变了a的地址
    7. cout << a << endl; //1000
    8. cout << *p << endl; //1000

    (3)空指针

        01 定义:指针变量指向内存中编号为0 的空间;

        02 用途:初始化指针变量。

    int *p = NULL;

        03 注意:空指针指向的内存不可以被访问。

    (4)野指针

        01 定义:指针变量指向非法的内存空间。

    (5)const修饰指针

          const修饰指针有三种情况,

        01 const修饰指针  ---->  常量指针,特点(指针的指向可以修改,但指针指向的值不可以修改)

    1. int a = 10;
    2. int b = 20;
    3. const int * p = &a;
    4. *p = 100; //错误。指针指向的值不可以修改
    5. p = &b; //正确。指针的指向可以修改
    6. a = 100; //正确。

        02 const修饰变量  ---->  指针常量,特点(指针的指向不可以修改,但指针指向的值可以修改)

    1. int a = 10;
    2. int b = 20;
    3. int * const p = &a;
    4. p = &b; //错误。指针的指向不可以修改
    5. *p = 100; //正确。指针指向的值可以修改

        03 const既修饰指针 ,又修饰常量。特点(指针的指向不可以修改,指针指向的值也不可以修改)

    1. int a = 10;
    2. int b = 20;
    3. const int * const p = &a;
    4. p = &b; //错误。指针的指向不可以修改
    5. *p = 100; //错误。指针指向的值不可以修改

    (6)指针和数组

    1. int arr[4] = {1,2,3,4};
    2. int *p = arr; //数组名就是数组的首地址
    3. cout << "数组的第一个元素:" << arr[0] << endl;
    4. cout << "数组的第一个元素:" << *P << endl;
    5. p++; //指针向后偏移4个字节
    6. cout << "数组的第二个元素:" << arr[1] << endl;
    7. cout << "数组的第二个元素:" << *P << endl;
    1. //利用指针访问数组元素
    2. int arr[4] = {1,2,3,4};
    3. int *p = arr; //数组名就是数组的首地址
    4. for(int i=0;i
    5. cout << *p << endl;
    6. p++;
    7. }

    (7)指针和函数

        01 作用:利用指针作函数的参数,可以修改实参的值。

          001 值传递

    1. void swap01(int n, int m){
    2. int temp = n;
    3. n = m;
    4. m = temp;
    5. cout << n << endl; // 1
    6. cout << m << endl; // 0
    7. }
    8. int main() {
    9. int n = 0;
    10. int m = 1;
    11. swap01(n, m);
    12. cout << n << endl; // 0
    13. cout << m << endl; // 1
    14. return 0;
    15. }

          002 地址传递 

    1. void swap02(int *p1, int *p2) {
    2. int temp = *p1;
    3. *p1 = *p2;
    4. *p2 = temp;
    5. cout << *p1 << endl; // 1
    6. cout << *p2 << endl; // 0
    7. }
    8. int main() {
    9. int n = 0;
    10. int m = 1;
    11. swap02(&n, &m);
    12. cout << n << endl; // 1
    13. cout << m << endl; // 0
    14. return 0;
    15. }

  • 相关阅读:
    SpringBoot + SpringSecurity + redis 整合优化版(2)
    【综合练习12】实现静态网页的相关功能
    springboot整合消息队列——RabbitMQ
    基于springboot+vue的游戏交流论坛系统 elementui
    云贝教育 |【PostgreSQL】Vacuum详解:深入理解与实践
    vmware使用桥接模式无法ping通本地和外网的解决方法
    Flutter高仿微信-第26篇-新的朋友
    java游泳馆浴池管理系统-小程序
    centos7 一键安装部署wvp-gb28181-pro
    [Acwing] 58周赛 4490. 染色
  • 原文地址:https://blog.csdn.net/fengbaobaola/article/details/127771287