2016-04-01 144 views
2

我需要指针声明的帮助,我有几个指针数组的类例如。C++指针声明访问指针数组

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正确的声明。

+0

你不能真的做临时工t,因为'mcpszXMLattrRoot'和'mcpszXMLattrA'是不同的类型,这意味着你不能将它们收集到同一个数组中。 'mcpszXMLattrRoot'的类型是'const char * const [5]',而'mcpszXMLattrA'的类型是'const char * const [4]'。数组中元素的数量是类型的一部分,而数组只能包含相同类型的元素。 –

+0

这是一个C++问题,而不是C问题。请删除'c'标签 – user3629249

回答

2

你可以存储mcpszXMLattrRootmcpszXMLattrA(即const char * const *。指针

const char* const * allOptions[] = {mcpszXMLattrRoot, mcpszXMLattrA}; 
2
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具有附加*,因为它是一个指针到炭的指针数组的数组。

因为ab*之前需要const常量。如果没有constantness这将是:

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}; 
+0

立即尝试此操作:const char * const * clsMainWin :: mcppAttributes [] – SPlatten

+0

此答案不允许使用单个索引进行访问。 – Peter

0

这可以被实现为:

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