Передача указателя на массив массивов символов в функцию? - PullRequest
1 голос
/ 12 марта 2011

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

char strings[5][100];

Таким образом, в памяти предположительно находится 500 смежных символов.Функция, которую я определил, выглядит следующим образом:

void foo(char *labels[100]);

Я думаю, у меня могут быть некоторые проблемы с синтаксисом, но я думаю, что это говорит: «Я функция, которая ожидает указатель намассив из 100 символов. "Так что labels* будет указывать на первый массив символов, а (labels + 1)* будет указывать на второй, и так далее.Я вызываю функцию следующим образом:

foo(&strings[0]);

Я думаю, что это делает захват адреса первого массива символов в strings.Сообщение об ошибке, которое я получаю, говорит мне, что функция ожидает char **, но аргумент - char (*)[100].Это сбивает с толку меня, так как нигде я не указывал, что указатель на char.

есть указатель на любую помощь, или если вы могли бы pointer меня в правильном направлении :)

Ответы [ 2 ]

4 голосов
/ 12 марта 2011
char strings[5][100]

объявляет strings как массив из 5 элементов.Каждый элемент представляет собой массив из 100 символов.

void foo(char *labels[100]);

объявляет foo как функцию, которая возвращает void и принимает массив указателей.( 100 - просто декоративное : оставить пустым или поставить 42 или 10000 - это то же самое)

Вы хотите

void foo(char (*labels)[100]);

, где параметр является указателемв массивы ровно 100 символов.

4 голосов
/ 12 марта 2011

strings - это двумерный массив. Таким образом, он уменьшается до char(*)[100] при передаче в функцию. Вместо этого вы можете иметь прототип, как -

void foo(char labels[][100], int row); // `row` decides which param to access.

void foo(char labels[][100], int row)
{
    for(int i = 0; i < 100; ++i) // If you need, modify all the 100 row elements
    {
        labels[row][i] = 'a'; // Modifying like this
        // ....
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...