【问题标题】:C++ Pointer to const array of const pointers指向 const 指针的 const 数组的 C++ 指针
【发布时间】:2016-06-23 18:00:11
【问题描述】:

我创建了一个 const 指针数组,如下所示:

const char* const sessionList[] = {
    dataTable0,
    dataTable1,
    dataTable2,
    dataTable3
};

指向该数组的常规非常量指针的正确语法是什么?我以为是const char**,但编译器不这么认为。

【问题讨论】:

  • 从技术上讲,您的 const char * * 将等同于您的数组,因为这是您的数组在传递给函数时将衰减到的值。您需要一个额外的间接来获取指向数组的指针。或者类似const char * [] *,但我不确定那个是否有效
  • 看起来&sessionList 的类型是const char * const (*)[4],但我正在努力声明具有这种类型的变量。
  • 你应该澄清你想要一个指向数组的指针还是指向数组元素的指针。这两个是不同的东西。
  • @ChrisDodd 你说得对,我错过了const

标签: c++ arrays pointers


【解决方案1】:

如果你真的需要一个指向数组的指针,正如你的标题所暗示的,那么这就是语法:

const char* const (*ptr)[4] = &sessionList;

【讨论】:

    【解决方案2】:
    const char* const sessionList[] = { ... };
    

    最好写成:

    char const* const sessionList[] = { ... };
    

    sessionList[0] 的类型是 char const* const
    因此,&sessionList[0] 的类型是 char const* const*

    你可以使用:

    char const* const* ptr = &sessionList[0]; 
    

    char const* const* ptr = sessionList; 
    

    这声明了一个指向sessionList 元素的指针。如果要声明指向整个数组的指针,则需要:

    char const* const (*ptr)[4] = &sessionList; 
    

    【讨论】:

      【解决方案3】:

      与您为数组元素声明的类型相同,并添加了一个额外的*

      const char* const *
      

      【讨论】:

      • @juanchopanza:这是一种指针类型,可以指向数组的任何元素,这通常就是人们所说的“指向数组的指针”的意思——使用时数组名变成的指针类型。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-04
      • 2021-12-08
      • 1970-01-01
      • 2015-09-10
      • 1970-01-01
      相关资源
      最近更新 更多