为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C
喵喵时光机 2019-06-21 13:47:34
指向指针的指针在C中是如何工作的?指向指针的指针在C中是如何工作的?你什么时候用?
查看完整描述

3 回答

?
侃侃尔雅

TA贡献1801条经验 获得超16个赞

让我们假设一台具有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 *.

  • 还有很多其他的原因在这里无法列举。


查看完整回答
反对 回复 2019-06-21
  • 3 回答
  • 0 关注
  • 598 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信