访问指针数组的C++指针声明

C++ pointer declaration to access arrays of pointers

本文关键字:指针 声明 C++ 数组 访问      更新时间:2023-10-16

我需要指针声明方面的帮助,我有几个带有指针数组的类,例如

const char* const clsMainWin::mcpszXMLattrRoot[] = {"bottom","left","right","top",NULL};
const char* const clsMainWin::mcpszXMLattrA[] = {"x","y","z",NULL};

我想做的是定义一个指针,它将上面的指针数组分组,允许我用一个索引选择其中一个,例如:

const char* const allOptions[] = {mcpszXMLattrRoot, mcpszXMLattrA};

其中:

allOptions[0][...] would be used to access mcpszXMLattrRoot and its contents:
allOptions[1][...] would be used to access mcpszXMLattrA and its contents

然而,到目前为止,我正在努力使allOptions的声明正确无误。

您可以存储mcpszXMLattrRootmcpszXMLattrA的指针(即const char * const *.

const char* const * allOptions[] = {mcpszXMLattrRoot, mcpszXMLattrA};
static const char* const a[] = {"a1", "a2", "a3"};
static const char* const b[] = {"b1", "b2", "b3", "b4"};
static const char* const* const z[] = {a, b};

z的类型具有额外的*,因为它是指向char的指针数组的指针数组。

在后一个*之前需要const,因为ab是常量。如果没有恒定性,它将是:

static const char* a[] = {"a1", "a2", "a3"};
static const char* b[] = {"b1", "b2", "b3", "b4"};
static const char** z[] = {a, b};

您可以使用constexpr 在类中初始化它

class Foo {
    static constexpr const char* const a[] = {"a1", "a2", "a3"};
    static constexpr const char* const b[] = {"b1", "b2", "b3", "b4"};
    static constexpr const char* const* z[] = {a, b};
};

或类外:

class Foo {
    static const char* const a[];
    static const char* const b[];
    static const char* const* z[];
};
const char* const Foo::a[] = {"a1", "a2", "a3"};
const char* const Foo::b[]= {"b1", "b2", "b3", "b4"};
const char* const* Foo::z[] = {a, b};

这可以通过以下方式实现:

class clsMainWin{
    static const char* const mcpszXMLattrRoot[5];
    static const char* const mcpszXMLattrA[4];
    static const char* const *allOptions[2];
    // And other things....
};
const char* const clsMainWin::mcpszXMLattrRoot[] = {"bottom","left","right","top",NULL};
const char* const clsMainWin::mcpszXMLattrA[] = {"x","y","z",NULL};
const char*const * clsMainWin::allOptions[2] = {mcpszXMLattrRoot, mcpszXMLattrA};