当前位置:网站首页 > Java基础 > 正文

java基础类指针



原始指针 (C++)

指针是一种变量。 它将对象的地址存储在内存中,并用于访问该对象。 原始指针是指其生存期不受封装对象控制的指针,例如智能指针。 可以为原始指针分配另一个非指针变量的地址,也可以为其分配 值。 未分配值的指针包含随机数据。

还可以取消引用指针以检索其指向的对象的值。 成员访问运算符提供对对象成员的访问权限

 

指针可以指向类型化对象或指向 。 当程序在内存中的堆上分配对象时,它会以指针的形式接收该对象的地址。 此类指针称为“拥有指针”。 当不再需java基础类指针要堆分配的对象时,必须使用拥有指针(或其副本)显式释放该对象。 未能释放内存会导致内存泄漏,并使该内存位置无法供计算机上的任何其他程序使用。 必须使用 (或 )释放使用 分配的内存。 有关详细信息,请参阅 和 运算符。

 

指针(如果未声明为 )可以递增或递减,以指向内存中的另一个位置。 此操作称为“指针算术”。 它用于在 C 风格编程中循环访问数组或其他数据结构中的元素。 指针不能指向不同的内存位置,从这个意义上说,它类似于引用。 有关详细信息,请参阅 和 指针。

 

在 64 位操作系统上,指针的大小为 64 位。 系统的指针大小决定了它可以拥有的可寻址内存量。 指针的所有副本都指向同一内存位置。 指针(以及引用)在 C++ 中广泛用于向/从函数传递较大的对象。 复制对象的地址通常比复制整个对象更加高效。 定义函数时,除非希望函数修改对象,否则请将指针参数指定为 。 通常, 引用是将对象传递给函数的首选方式,除非对象的值可能为

指向函数的指针使函数能够传递给其他函数。 它们用于 C 风格编程中的“回调”。 新式 C++ 使用 lambda 表达式来实现此目的。

初始化和成员访问

下面的示例展示了如何声明、初始化和使用原始指针。 它使用 初始化,以指向堆上分配的对象,必须显式删除 () 该对象。 该示例还展示了与原始指针相关的一些危险。 (请记住,此示例是 C 风格的编程,而不是新式 C++!)

 

指针算术和数组

指针和数组密切相关。 当数组按值传递给函数时,它将作为指向第一个元素的指针传递。 以下示例演示了指针和数组的以下重要属性:

  • 运算符返回数组的总大小(以字节为单位)
  • 若要确定元素数目,请将总字节数除以一个元素的大小
  • 当数组被传递给函数时,它会衰减为指针类型
  • 运算符应用于指针时,它将返回指针大小,例如,x86 上为 4 个字节,x64 上为 8 个字节
 

某些算术运算可用于非 指针,以使其指向另一个内存位置。 指针使用 运算符递增和递减。 此方法可用于数组,在非类型化数据的缓冲区中尤其有用。 按一个 的大小(1 个字节)递增。 类型化指针按其指向的类型的大小递增。

以下示例演示如何使用指针算术访问 Windows 上位图中的单个像素。 请注意 以及取消引用运算符的使用。

 

指针

指向 的指针仅指向原始内存位置。 有时需要使用 指针,例如在 C++ 代码和 C 函数之间传递时。

将类型化指针强制转换为 指针时,内存位置的内容保持不变。 但是,类型信息会丢失,因此无法执行递增或递减操作。 例如,可以将内存位置从 强制转换为 ,然后再转换回 。 此类操作本质上容易出错,需要非常小心以避免错误。 新式 C++ 几乎在所有情况下都不鼓励使用 指针。

 

指向函数的指针

在 C 风格的编程中,函数指针主要用于将函数传递给其他函数。 此方法使调用方能够在不修改函数的情况下自定义函数的行为。 在新式 C++ 中,lambda 表达式提供了相同的功能,并且提供了更高的类型安全性和其他优势。

函数指针声明指定指向函数必须具有的签名:

 

以下示例展示了函数 ,该函数将接受 并返回 的任何函数作为参数。 根据传递给 的函数,它将在前面或后面添加字符串。

 

另请参阅

  • 上一篇: java基础310
  • 下一篇: java基础339讲
  • 版权声明


    相关文章:

  • java基础3102025-03-31 20:10:06
  • 0基础转java2025-03-31 20:10:06
  • java基础概念解析2025-03-31 20:10:06
  • o基础java2025-03-31 20:10:06
  • java程序设计基础教程2025-03-31 20:10:06
  • java基础339讲2025-03-31 20:10:06
  • java基础之linkedlist2025-03-31 20:10:06
  • java基础学习知识2025-03-31 20:10:06
  • java基础之 反射2025-03-31 20:10:06
  • 张孝祥java基础视频2025-03-31 20:10:06