C++为什么需要并使用指针?我知道它们为语言增添了强大的功能,但对于初学者来说,这使得理解变得更加困难。像F#、Java、Ruby、Python、Lua等语言在没有指针的情况下运行良好,并且它们都很强大。
C++为什么需要并使用指针?我知道它们为语言增添了强大的功能,但对于初学者来说,这使得理解变得更加困难。像F#、Java、Ruby、Python、Lua等语言在没有指针的情况下运行良好,并且它们都很强大。
你提到的所有其他语言(至少还有Java),虽然非常有用和可用,但是不像C ++(和C)允许您接近机器:简单地说,所有这些语言都会对您施加更高级别的抽象...这可能大多数情况下都可以接受,但将偶尔妨碍您。
C ++是一种更大更复杂的语言,因为它允许在非常低的抽象级别(非常接近机器)和相当高的抽象级别(接近您提到的许多语言)之间进行编程,而且在同一语言内,事实上在同一源文件内。
初学者最好远离这种强大且(不可避免地)复杂的能力——但并非每个程序员都是初学者,并且并非每一位代码都需要处于具有“保护可怜的家伙免受伤害”的主要设计目标的环境中!-)
也许C++并不适合初学者。
指针已经存在很长时间了,它们在Pascal和C语言中就有了。当C++出现时,如果没有指针,它可能会一开始就失败。
我还没有看到的一个原因:
C++ 的设计目标是与 C 兼容,因此简单来说,C++ 是 C 的超集(虽然不是100%正确,但几乎是这样)。由于 C 具有指针(并且由于其低级别的特性需要它们),C++ 也需要支持它们。
C#有指针,没有它们我就不可能很好地完成工作。这完全取决于你在做什么,学习指针对开发人员非常有益。问题不是为什么使用它们,而是何时使用它们。
/* Assuming 16-bit DOS environment, 80x25 character video mode. */
char* video = 0xA0000;
video[1] = 'H';
video[3] = 'e';
video[5] = 'l';
video[7] = 'l';
video[9] = 'o'; /* prints "Hello" in the top-left corner of the screen.
你把指针算术和不可变指针(也称为引用)混淆了。 所有这些语言,包括你没有提到的Java,都有引用。 引用比指针稍微弱一些,但在需要使用指针算术或双重或三重指针的阶段之前,你不会注意到这一点。 但实际上,在底层,引用与指针是相同的东西,只是语言不允许你对它们做任何想做的事情(即它们不是一级对象)。
考虑这个Python代码:
class X: z=13
y=X()
def f(aa): aa.z = aa.z+1
print(y.z)
f(y)
print(y.z)
f()会改变y.z的值,这正是使用指针编写相应的C或C++代码所会发生的。
C++为什么需要并使用指针?
C++本身并不需要指针,是程序员需要它们。比如一些编写设备驱动的程序员确实需要使用指针。
因此,必须有一些语言允许直接访问原始内存。C++恰好是其中之一。
大多数高级语言本身并没有指针,但它们使用类似的结构。这里有一个例子。在C++中,如果你有像这样的东西:
Foo myObject();
你已经声明了一个 Foo 的实例,它总是会是 Foo 类型。你不能声明一个 Foo 并实例化另一种类型而不使用指针。然而,在 C# 中,你可以轻松地做到这一点:
Foo myObject = new Bar(); // assuming Bar derives from class Foo