开发者

Arrays of pointers to arrays?

I'm using a library which for one certain feature involves variables like so:

extern const u8 foo[];
extern const u8 bar[];

I am not allowed to rename these variables in any way.

However, I like to be able to access these variables through an array (or other similar method) so that I do not need to continually hardcode new instances of these variables into my main code.

My first attempt at creating an array is as follows:

const u8* pl[] = {
    &foo,
    &bar
};

This gave me the error cannot convert 'const u8 (*)[]' to 'const u8*' in initialization, and with help elsewhere along with some Googling, I changed my array to开发者_开发百科 this:

u8 (*pl)[] = {
    &foo,
    &bar
};

Upon compiling I now get the error scalar object 'pl' requires one element in initializer.

Does anyone have any ideas on what I'm doing wrong? Thanks.


An array of pointers to arrays only works if foo and bar have exactly the same size, and that size is known at compile time in your translation unit.

const u8 (*pl[])[32] = {&foo, &bar};

If that is not the case, you must use an array of pointers to bytes.

const u8 *pl[] = {foo, bar};


As the arrays don't have a size in their declaration is there any reason you can't just an array of pointers to their first elements?

E.g.

const u8* pl[] = { foo, bar };

If you wanted an array of pointers to arrays I think that you would need to do:

const u8 (*pl[])[] = { &foo, &bar };

but I don't see that it really has any advantage over the previous solution.


extern const int a[];

const int *  aa[] = { a };


Remove the &. An array decays normally into a pointer.

typedef int u8;  // Using int as I don't know what a u8 is.

const u8 foo[] = { 1, 2, 3};
const u8 bar[] = { 1 };

const u8* pl[] = {
    foo,
    bar
};
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜