C++指向常量指针数组的指针

7

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

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

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


从技术上讲,你的 const char * * 等同于你的数组,因为当传递到函数时,这就是你的数组将会衰变成的形式。你需要额外的间接引用来获取指向数组的指针。或者像 const char * [] * 这样的东西,但我不确定它是否有效。 - KABoissonneault
1
看起来&sessionList的类型是const char * const (*)[4],但我很难声明一个这样类型的变量。 - KABoissonneault
你应该澄清你想要一个指向数组还是指向数组元素的指针。这两者是不同的东西。 - juanchopanza
当你在大多数情况下使用数组时(除了sizeofdecltype&),它会衰变为const char * const * - Chris Dodd
@ChrisDodd 你说得对,我漏掉了一个 const - KABoissonneault
3个回答

6
如果您需要一个指向数组的指针,正如您的标题所示,那么这就是语法:
const char* const (*ptr)[4] = &sessionList;

5
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; 

2
与您声明的数组元素相同类型,额外添加一个 *
const char* const *

@juanchopanza:这是一个指针类型,可以指向数组的任何元素,这通常是人们所说的“指向数组的指针”——当您使用数组名称时,它会转换为指针类型。 - Chris Dodd

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接