08 chapter 指针(c++大学教程)学习笔记

本文详细介绍了C++中的指针,包括如何声明和初始化指针,指针运算符如地址运算符(&)和间接运算符(*),以及如何通过指针按引用传递参数。此外,还探讨了内置数组的声明、初始化和访问,以及const修饰指针的四种情况。同时,讲解了sizeof运算符的用法,指针加减运算和指针与内置数组的关系。最后,提到了基于指针的字符串初始化及其表示方式。

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

  • 8.1 指针声明和初始化
    • int *x, *y;//指针声明
      • 注意:每个指针声明变量前必须有星号,因为星号只作用于之后的第一个变量
    • 初始化
      • 定义为空指针
        • int *x = nullptr;
      • 定义为整数0或NULL
        • int *x = 0/Null;
        • NULL用来表示值0,因此和0是等价的,只有0无需强制转换为指针类型就可以初始化赋值给指针变量
  • 8.2 指针运算符
    • 地址运算符&
      • &用来获取操作数的内存地址,是一个一元运算符
      • int y = 5; int *yPtr = nullptr; yPtr = &y;//指针保存的是一个变量的地址,因此用取址符&
    • 间接运算符*
      • *返回的是操作数所指向的对象,而不是地址
      • cout << *yPtr << endl; cout << y << endl;//*yPtr 与 y是等价的,都是一个值
      • 注意:间接引用的对象一定要是一个初始化的非空指针
  • 8.3 使用指针按引用传递
    • 使用指针传递参数传递的是参数的地址,可以直接修改数据参数,而不是像按值传递会创建实参副本
    • int cubeByReference(int *); int cubeByReference(int *nPtr){ *nPtr = (*nPtr)*(*nPrt)*(*nPtr);}
  • 8.4 内置数组
    • 声明
      • type arrayName[arraySize];//arraySize必须是一个大于0的整数常量
    • 方位内置数组元素
      • 通过下标运算符[ ]访问单个元素
      • 注意:内置数组和类模板array一样,不提供下标边界检查功能
    • 初始化
      • int numbers[5] = {0, 0, 0, 0, 0};
      • int numbers[] = {0, 0, 0, 0, 0};
      • 当不声明数组大小时,内置数组会根据初始化值列表的个数自动设置大小
      • 若初始化值列表元素个数小于列表大小,剩下的元素会被自动初始化为0,false,nullptr,类的对象会根据构造函数自动初始化
    • 声明内置数组形参
      • int elements( const int values[], const size_t numberOfElement){};
      • int elements( const int *values, const size_T numberOfElement){};
      • 与类模板array不同的是,函数不知道内置数组的大小,因此需要传递参数数组大小
      • 用*values和values[]声明是等价的,因为数组名指向的是数组第一个元素的内存(&values[0] = values),所以可以用指针声明
  • 8.5 使用const修饰指针
    • 指向非const数据的非const指针
      • int *xPtr
      • 权限最大,可以修改指针和数据
    • 指向const数据的非const指针
      • const int *xPtr
      • 不可以通过指针去修改指向对象,但可以修改指针
    • 指向非const数据的const指针
      • int const *xPtr
      • 可以通过指针去修改指向对象,不可以修改指针
    • 指向const数据的const指针
      • const int const *xPtr
      • 都不能修改
  • 8.6 sizeof运算符
    • 一元运算符sizeof返回内置数组或者其他数据类型的字节大小
      • 当操作数为数据类型时需要加圆括号
        • sizeof(int/double/char);
      • 当操作数为表达式或者变量时不需要加
        • sizeof x/a+b;
  • 8.7 指针表达式与运算符
    • 指针加减整数
      • ++/-- vPtr;
      • 表示指针地址加上或减去一个数的字节大小×数的大小
    • 指针相减
      • x = v2Ptr - vPtr;
      • 表示从一个指针到另一个指针之间出现的元素个数
      • 注意:两个指针必须指向同一个内置数组才有意义,否则是一个逻辑错误
    • 指针赋值
      • 当指针类型不同时需用强制类型转换符reinterpret_cast
      • void指针(void*)可以表示任何类型指针
        • 不能间接引用void*指针,因为void指针指向一个未知数据类型的内存地址
  • 8.8 指针与内置数组
    • 指针/偏移量表示
      • *(bPtr + 3);
    • 以内置数组明作为指针的指针/偏移量表示
      • *( b + 3);
    • 指针下标表示
      • bPtr[3]
    • 数组名下标表示
      • b[3]
  • 8.9 基于指针的字符串
    • 字符常量char是一个整数值
    • 字符串是一个被视为整体的字符序列
    • 初始化
      • char color[] = "blue";
      • char color[] = {'b','l','u','e','\0'};//\0表示空字符结尾
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值