指向指针的指针在C中是如何工作的?

指向指针的指针在C中是如何工作的?

指向指针的指针在C中是如何工作的?你什么时候用?



喵喵时光机
浏览 599回答 3
3回答

侃侃尔雅

让我们假设一台具有8位地址的8位计算机(因此只有256字节的内存)。这是内存的一部分(顶部的数字是地址):  54   55   56   57   58   59   60   61   62   63   64   65   66   67   68   69+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+|    | 58 |    |    | 63 |    | 55 |    |    | h  | e  | l  | l  | o  | \0 |    |+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+您可以在这里看到,在地址63处,字符串“hello”开始。所以在这种情况下,如果这是内存中唯一出现的“Hello”,const char *c = "hello";..定义c为指向(只读)字符串“hello”的指针,因此包含值63。c本身必须存储在某处:在上面的示例中,位置为58。当然,我们不仅可以指向字符,还可以指向其他指针。例如:const char **cp = &c;现在cp指点c,也就是说,它包含的地址是c(58)。我们还可以更进一步。考虑:const char ***cpp = &cp;现在cpp存储.的地址cp..所以它有值55(基于上面的例子),您猜到了:它本身存储在地址60。至于为什么一个人使用指向指针的指针:数组的名称通常会产生第一个元素的地址。因此,如果数组包含类型为t,对数组的引用具有以下类型t *..现在考虑一个类型数组的数组。t:对这个2D数组的引用自然会有类型(t *)* = t **,因此是指向指针的指针。尽管字符串数组听起来是一维的,但实际上是二维的,因为字符串是字符数组。因此:char **.函数f将需要接受类型的参数。t **如果要更改类型的变量t *.还有很多其他的原因在这里无法列举。
打开App,查看更多内容
随时随地看视频慕课网APP