是否存在需要使用指针的情况或具体示例?例如,某些需要指针才能完成的任务可否不使用它们来实现?我们可以将指针作为函数参数发送,但这也可以通过返回数据来完成。在函数中使用指针可以更改多个变量,但是也有一种解决方法。
我们真的需要指针吗?
我知道这是个愚蠢的问题,抱歉,但在这种情况下似乎对我来说是正确的。我只想知道是否存在不能使用指针完成的事情。
是否存在需要使用指针的情况或具体示例?例如,某些需要指针才能完成的任务可否不使用它们来实现?我们可以将指针作为函数参数发送,但这也可以通过返回数据来完成。在函数中使用指针可以更改多个变量,但是也有一种解决方法。
我们真的需要指针吗?
我知道这是个愚蠢的问题,抱歉,但在这种情况下似乎对我来说是正确的。我只想知道是否存在不能使用指针完成的事情。
我认为指针可以作为数组的(高效)迭代器非常有用。
例如(C99):
ptrdiff_t stride = 8;
double* data = ...;
size_t size = ...;
const double* end = data + size * stride;
for (double* restrict p = data; p < end; p += stride)
*p = ...;
你可以看到指针算术在表达意图方面非常有用。能够传递指针和步长来表示子数组也很有用。
一些语言禁止使用指针来操作数据(但允许引用),尽管在这些语言中,我从来没有对它们让你编写作用于数组的函数的方式感到舒适。在C语言中,你可以这样写。
void foo(const double* data, ptrdiff_t stride, size_t size, double* out);
void Foo(double[] data, int stride, double[] output);
但现在输出
被强制成一个完整的数组,而不是其他东西的子数组,或者在只有一个元素输出的情况下是一个普通的堆栈变量(如果你真的想要,C#提供指针,但让我们假装它没有)。
高级语言中是否需要指针?从严格的图灵机意义上来说,不需要。然而,在现实中,我们不是在图灵机上编码——我们使用高级语言编码,开发人员需要某些构造来减轻编写代码的心理负担。指针使得某些抽象(例如链表)更容易表达。因此,虽然在“需要”一词的最严格解释中答案可能是否定的,但在实践中,答案是肯定的,我们确实需要它们。
请阅读StackOverflow FAQ。
指针的功能是引用的超集。你可以用引用做的所有事情都可以用指针来完成。指针是比引用更强大的工具,这就是为什么C语言使用指针的原因。它是一种低级强大的语言。
是否有任何情况或特定示例需要使用指针?
是的,例如指针算术运算。
//copy string to a buffer
char buffer[1024];
strcpy(buffer, "hello ");
strcpy(buffer + 6, "world!");
void foo(Object const& o); // <- this one is prefered
void foo(Object *o);
这里有一组规则,说明如何将对象传递给function。
我们可以将指针作为函数参数发送,但是这可以通过返回的数据来完成吗?
可以做到。返回指针的问题在于“指针指向的存储位置在哪里?”返回本地变量是一个危险的想法。(C++ 11通过移动语义解决了这个问题)
我们可以使用指针来更改函数中的多个变量,但也有解决方法
抱歉,我不理解这个。
我们真的需要指针吗?
是的,我们需要。