使用Go编程语言;指针如何变得有用?
(如果它们没有真正的用处,为什么不非法呢?)
任何数据类型的有用性取决于要解决的问题和用于解决该问题的方法。如果数据类型不适合该问题,那么它根本就不适合该问题,仅此而已。
Go编程语言(以及大多数其他编程语言)基于程序员可以用来构建新数据类型的 简单 规则。其中一些规则是:
*T
:创建一个指向T的新数据类型[10]T
:Ts数组struct { t T; u U ... }
:包含T作为组成部分的结构程序员可以通过组合这些简单的规则来创建复杂的数据类型。可能的数据类型总数超过了有用的数据类型总数。显然,存在(并且必须存在)根本没有用的数据类型。这只是建立新数据类型的规则很简单这一事实的自然结果。
类型**T
属于不太可能出现在程序中的类型类别。可以写的*****T
事实并不意味着这种类型必须非常有用。
最后,您的问题的答案 :
该类型**T
通常出现在我们想要将一个类型的值的用户重定向T
到另一个类型的值的上下文中T
,但是由于某些原因,我们无法访问该值的所有用户,或者发现这些用户会花费太多时间:
T
(由于某种原因)T
为值的用户都可以通过指针访问该值T
到另一个值在这种情况下,使用**T
是自然的,因为它允许我们在O(1)中实现第三步:
type User_of_T struct {
Value **T
}
// Redirect all users of a particular value of type T
// to another value of type T.
func (u *User_of_T) Redirect(t *T) {
*(u.Value) = t
}
本文向大家介绍什么是指向指针的指针? 相关面试题,主要包含被问及什么是指向指针的指针? 时的应答技巧和注意事项,需要的朋友参考一下 指针指向的变量是一个指针,即具体内容为一个指针的值,是一个地址. 此时指针指向的变量长度也是4位.
指针可以指向一份普通类型的数据,例如 int、double、char 等,也可以指向一份指针类型的数据,例如 int *、double *、char * 等。 如果一个指针指向的是另外一个指针,我们就称它为 二级指针,或者 指向指针的指针。 假设有一个 int 类型的变量 a,p1是指向 a 的指针变量,p2 又是指向 p1 的指针变量,它们的关系如下图所示: 将这种关系转换为C语言代码: 指针变
如果C中有指针(char*names[])和指向指针的指针(char**cur_name=names);有指向指针的指针吗? 或者指向指针的指针只是一个链表?也许这是个愚蠢的问题,但我想知道答案。
我正在学习链表,以及如何在C中使用结构和指针创建链表。下面我举一个例子。据我所知,被调用的将头节点所在的结构的开始内存位置作为参数传递。push()函数的参数将结构节点作为指向指针的指针,因此它作为引用传递,而不是实际副本。因此,我们的的第一个指针只是指向头部节点的内存位置的指针,第二个指针指向该值,该值是头部节点指向的下一个内存位置。我们通过为结构节点分配一些内存,在结构节点内创建一个名为new
问题内容: 这是指向指针的指针 您何时真正使用此功能?您可以适当地提出一些可以更轻松地执行其他操作的方法,但这不是我要的。我真的想知道您将在生产中使用此功能吗? 问题答案: 将指针传递给某物的目的是是否 需要 修改指向的值。(我们也使用指针来避免在传递时复制大型数据结构,但这只是为了优化。) 像这个例子一样: 预期的输出(在Go Playground上尝试): 如果of的参数仅接收,则只能修改副本
6. 指向指针的指针与指针数组 指针可以指向基本类型,也可以指向复合类型,因此也可以指向另外一个指针变量,称为指向指针的指针。 int i; int *pi = &i; int **ppi = π 这样定义之后,表达式*ppi取pi的值,表达式**ppi取i的值。请读者自己画图理解i、pi、ppi这三个变量之间的关系。 很自然地,也可以定义指向“指向指针的指针”的指针,但是很少用到: int