博客
关于我
c++ new
阅读量:215 次
发布时间:2019-02-28

本文共 1737 字,大约阅读时间需要 5 分钟。

指针与数组运算规则

指针的基本使用规则

指针在C语言中是非常强大的工具,但需要正确理解其行为方式。以下是指针的基本规则:

  • 算术运算的限制

    指针只支持四种算术运算符:++--+-。指针只能与整数进行加减操作。

    • 当指针的值增加时,它将指向其基本类型的下一个元素的存储单元。
    • 减少时,则指向上一个元素的存储单元。
  • 指针的运算原则

    • p + n:指针将从当前位置开始向后移动n个存储单元。
    • p - n:指针将从当前位置开始向前移动n个存储单元。
    • 需要注意的是,两个指针不能相加或相减。
  • 数组大小的理解

    • 当使用int *p = &x时,p指向的是x这个整数的地址。
    • int a[10]中,a实际上等于&a[0],即数组名直接指向数组的第一个元素。
    • 对于二维数组int b[3][4]b等于&b[0],而b[0]等于&b[0][0]
  • 指针与数组的结合使用

    在使用指针和数组时,需要注意以下几点:

  • 运算符优先级

    • []的优先级高于*,因此int *p[4]实际上表示p是一个存放四个指针的数组。
    • int (*q)[4]表示q是一个指向长度为4的数组的指针。
  • 数组名的含义

    • char* arr[]表示arr是一个存放char*类型指针的数组。
    • char* arr[5]表示arr是一个长度为5的数组,arr[0]将被转换为char*类型。
  • 动态数组的创建与使用

    动态创建数组时,需要注意以下几点:

  • 一维数组的动态创建

    • int *p = new int[11];:通过new操作符动态创建一个长度为11的整数数组。
    • 使用delete[] p;delete p;(后者会导致未释放内存的错误)释放内存。
  • 二维数组的动态创建

    • int (*p)[102] = new int[4][102];:创建一个长度为4、每个元素大小为102的二维数组。
    • 需要使用delete[] p;释放内存。
  • 对象的动态创建

    • int *p = new int(102);p指向一个初始值为102的整数对象。
    • 对于没有默认构造函数的内置类型(如int),new int;会导致错误,而new int();则会正确初始化为0。
  • 类指针的使用规范

    在使用类指针时,需要注意以下几点:

  • new与delete的正确使用

    • 对于类对象A* pA = new A;,使用delete pA;释放内存。
    • 对于数组形式的类对象A* pA = new A[N];,使用delete[] pA;释放内存。
  • 括号的作用

    • new A:默认调用无参数构造函数。
    • new A(5):调用A(int)构造函数。
    • new A():与new A效果相同,都是调用无参数构造函数。
  • 数组对象的赋值

    • int (*p)[4] = new int[4];p是一个指向整数数组的指针,数组大小为4。
    • int (*p)[4] = new int;:这样赋值是错误的,因为new int返回的是一个单个整数的地址,而p要求一个大小为4的数组地址。
  • 括号的作用分解

    在编写代码时,括号的使用非常重要:

  • 中括号[]

    • 用于指定数组的大小。
    • int a[3]a是一个长度为3的整数数组。
    • int* a[3]a是一个存放3个整数指针的数组。
  • 小括号()

    • 用于指定构造函数的参数。
    • int* a = new A(5):调用A(int)构造函数。
    • int* a = new A();:默认调用无参数构造函数。
  • 常见错误与警示

    在编写代码时,以下错误需要避免:

  • 常数的重定义

    • const int x = 1; int *p = &x;:这样会修改x的值,违反常量的规定。
    • 正确的写法是int const *p = &x;
  • 数组与指针的混淆

    • int a[10]; int *p = a;:这里的a是数组的地址,而p需要一个数组的地址。
    • 正确的赋值应为int *p = &a[0];
  • 动态数组的初始化

    • int* arr = new int[3]{1, 2, 3};:无法在动态创建数组时进行初始化,正确的做法是逐个赋值。
  • 类指针的正确使用

    • int (*p)[4] = new int[4];:这里的p是一个指向整数数组的指针。
    • 如果不使用[]p将无法正确表示数组的大小。
  • 转载地址:http://dqpi.baihongyu.com/

    你可能感兴趣的文章
    python 列表转字典方法
    查看>>
    Python 列表(List)概述-ChatGPT4o作答
    查看>>
    Python网络爬虫基础进阶到实战教程
    查看>>
    Python 初学者需要知道的四条建议
    查看>>
    Python 判断字符串是否包含子字符串
    查看>>
    python 判断当前时间是否为零点
    查看>>
    python 利用pandas读取本地中CSV文件的指定列 列名重命名 并保存回本地
    查看>>
    python 利用pyspark读取HDFS中CSV文件的指定列 列名重命名 并保存回HDFS
    查看>>
    python 利用pyttsx3文字转语音
    查看>>
    python 利用已有Ner模型进行数据清洗合并
    查看>>
    python 到大数据开发工程师_如何成为一个大数据开发工程师?
    查看>>
    python 加密解密(base64, AES)
    查看>>
    Python 包管理器和 Node.js
    查看>>
    Python 单词字母顺序不变且所有倒排
    查看>>
    python 反射机制
    查看>>
    python 启动提示IDLE's subprocess didn't make conne...
    查看>>
    python 命令接口_实现“[命令][操作][参数]”样式的命令行接口?
    查看>>
    Python 和 OpenCV.如何检测图像中的所有(填充)圆形/圆形对象?
    查看>>
    Python 和 RabbitMQ - 聆听来自多个渠道的消费事件的最佳方式?
    查看>>
    python编辑器打不开_关于命令ride.py打不开RF,而是打开pycharm编辑器问题解决思路...
    查看>>