Массивы указателей на массивы? - PullRequest
4 голосов
/ 04 мая 2010

Я использую библиотеку, которая для одной определенной функции включает переменные, такие как:

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

Мне запрещено переименовывать эти переменные.

Однако мне нравится иметь возможность доступа к этим переменным через массив (или другой подобный метод), чтобы мне не нужно было постоянно жестко кодировать новые экземпляры этих переменных в моем основном коде.

Моя первая попытка создать массив выглядит следующим образом:

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

Это дало мне ошибку cannot convert 'const u8 (*)[]' to 'const u8*' in initialization, и с помощью других источников, наряду с поиском в Google, я изменил свой массив следующим образом:

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

При компиляции я теперь получаю ошибку scalar object 'pl' requires one element in initializer.

У кого-нибудь есть идеи о том, что я делаю неправильно? Благодаря.

Ответы [ 4 ]

7 голосов
/ 04 мая 2010

Массив указателей на массивы работает только в том случае, если foo и bar имеют одинаковый размер, и этот размер известен во время компиляции в вашей единице перевода.

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

Если это не так, вы должны использовать массив указателей на байты.

const u8 *pl[] = {foo, bar};
2 голосов
/ 04 мая 2010

Поскольку массивы не имеют размера в своем объявлении, есть ли причина, по которой вы не можете просто использовать массив указателей на их первые элементы?

* 1003 Е.Г. *

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

Если вам нужен массив указателей на массивы, я думаю, что вам нужно будет сделать:

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

но я не вижу, чтобы оно действительно имело какое-либо преимущество перед предыдущим решением.

1 голос
/ 04 мая 2010

Удалить &. Массив обычно распадается на указатель.

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
};
1 голос
/ 04 мая 2010
extern const int a[];

const int *  aa[] = { a };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...