Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Programming languages 为什么在编程中需要指针?_Programming Languages - Fatal编程技术网

Programming languages 为什么在编程中需要指针?

Programming languages 为什么在编程中需要指针?,programming-languages,Programming Languages,在用任何语言编写代码时使用指针是否重要?例如,C语言是否使用了更多内存 谢谢你,指向值的指针就像指向页面的URL 指针和URL一样重要 关于内存:URL占用的内存远远少于指向页面的内存,指针也一样,这是一个很难回答的问题,不需要进行长时间的讨论。首先,指针是非常有用的,并且是使语言变得多功能所必需的 一种非常典型的情况是,您希望通过引用传递变量。这意味着您希望在函数中更改其值。只传递变量名,只传递其值。相反,您必须传递一个指针,它显示传递的变量地址 或者,当您必须指向一个新的内存创建节点时,如链

在用任何语言编写代码时使用指针是否重要?例如,C语言是否使用了更多内存


谢谢你,指向值的指针就像指向页面的URL

指针和URL一样重要


关于内存:URL占用的内存远远少于指向页面的内存,指针也一样,这是一个很难回答的问题,不需要进行长时间的讨论。首先,指针是非常有用的,并且是使语言变得多功能所必需的

一种非常典型的情况是,您希望通过引用传递变量。这意味着您希望在函数中更改其值。只传递变量名,只传递其值。相反,您必须传递一个指针,它显示传递的变量地址

或者,当您必须指向一个新的内存创建节点时,如链表节点


就内存而言,指针就像另一个变量。因此,如果一个整数变量包含4个字节的存储(不是内存),那么该变量的整数指针包含4个字节的存储。它不是关于内存,而是关于存储。

不,编程语言并不不可避免地需要指针。有些语言没有指针:Java和Python是众所周知的例子。许多采用函数范式的语言没有(内置)指针的概念


在C中必须使用指针的原因是C是一种相对低级的语言。它最适合于编写固件、驱动程序、操作系统组件或性能关键库。在所有这些领域中,您通常直接处理大量内存块和地址,指针是内存地址的C抽象。

与SpyrosP的评论一样,这个问题很难在不进行长时间讨论的情况下回答

我想我的简短回答是:指针对编程是绝对必要的吗?不。它们使一些问题更容易或更容易解决,但你总能找到替代解决方案。这就像问:“数据库对编程重要吗?”或者甚至“乘法运算符对编程重要吗?”去掉任何一个或两个特性,你几乎总能用其他方式完成剩下的特性

有许多例子说明指针是有用的

例如,当我们想要在两个或多个事物之间创建关联时,指针非常有用,所有这些事物都可以独立更新。比如,假设我们有一块内存,其中包含客户信息,另一块内存包含订单信息。订单是给某位顾客的。我们可以将所有客户信息复制到订单块中。但是,如果客户信息发生变化,我们必须在两个地方进行更改。如果我们在内存中保存多个订单,可能是针对相同或不同的客户,该怎么办?现在,如果客户信息被更改,我们必须以某种方式知道哪些订单与该客户相关,并更改所有订单。如果我们这样做出错,我们可能会有相互矛盾的客户信息

但是有了指针,我们可能只有一份客户信息,订单上有一个指向客户的指针。然后,如果客户信息发生变化,我们不需要在每个订单中更新另一个副本,因为每个订单中都没有“其他副本”。所有订单都只有一个指向一个副本的指针。我们改变了一个地方,所有其他地方都神奇地看到了同样的变化


你可能想买一本关于数据结构的书或找一个网站来获得更多的例子。

可能的重复当然,它们有指针,只是没有明确使用。对象是指针。@Spyros:不,它们不是。引用有点像指针,但在大多数语言中,对象不是指针。即使在C++中,对象也是指针。@ ULIDTKO:语句显然是一个对象与指针的相关性的夸张(或者如果你更喜欢它),对象不是指针,但是在爪哇和C++和各种其他语言中,我们使用“句柄”或“引用”或他们想要使用的任何术语,这些指针是指向对象的指针。我想你可以在技术上狡辩一句,对象引用不一定是一个实际地址,而可能是一个对象的其他标识符。也就是说,我们可以讨论“指针”的确切定义。但在实践中,对象引用看起来像一个指针,并且起着指针的作用。它通过了“鸭子测试”:它是一个指针。@Jay,没错。引用实际上是指针。指向对象,但指向指针。如果使用类型&引用而不是指针,则可以修改函数中的变量,其中类型为int或float或其他类型。但是&也是一个间接指针:)变量标识符也是一种间接指针。+1非常好的解释。正如我也说过的,处理一个链接列表,其中的元素基本上“还没有”,这就是为什么指针非常有用的一个例子。你在这里很好地描述了一个完整的例子。我同意,链表是指针有用性的另一个极好的例子。我不知道你说的“不在那里”是什么意思。我认为关键的一点是,“您希望维护一个有序的列表,添加和删除项目,而不必移动大量数据。”-1因为尽管指针作为实现细节是必要的,但给出的示例不需要向开发人员公开它们。例如,Java有“引用”,本质上是指针,只不过是一个实现细节。尽管没有指针作为语言特性,但实现链表或在两个对象之间链接而不复制数据肯定是可能的,甚至很容易。在这种情况下,指针是一种抽象。@Nateowami我认为Java引用是指针。当然,您可以在不使用实际内存地址的情况下实现Java引用,就像它一样