C - Проблемы с передачей массивов по ссылке с использованием структур - PullRequest
0 голосов
/ 08 апреля 2020

Я пытаюсь передать массив двумерных символов *, массив 1D int и целое число в функцию, используя структуру, однако у меня возникают проблемы, когда я не могу понять, как передать их по ссылке с помощью указателей, а не просто по значению. Мне нужно, чтобы все переменные были доступны для редактирования с помощью функций, в которые они передаются, и чтобы это значение отражалось во всей программе, а не только в области действия функции. По сути, как глобальная переменная, но передается от функции к функции с использованием структур, определенных изначально в функции main.

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

Я использую GTK, так что пока как я знаю, единственный способ передать несколько аргументов в обратный вызов - это использовать структуры, поэтому мне нужно передавать их через структуру, а не передавать их непосредственно в функцию. Если я не прав?

Мне нужно определить следующее:

char* queuedHashes[100][101];
int queuedHashTypes[100] = {(int)NULL};
int hashCount = 0;

У меня возникли проблемы с пониманием указателя и синтаксиса структуры, необходимых для достижения этой цели, и методов, которые я пробовал привело к тому, что я столкнулся с типом массива char * not assignable, поэтому не смог реализовать ничего, что пока работает.

Любая помощь будет принята с благодарностью, спасибо.

1 Ответ

1 голос
/ 08 апреля 2020

Чтобы передать структуру через «ссылку» (я поставил ее в кавычки, потому что C не имеет «ссылки»), вы просто передаете указатель на структуру. Содержимое структуры находится в памяти, на которую указывает указатель структуры.

Так что, если у вас есть структура, такая как

struct myStruct
{
    char* queuedHashes[100][101];
    int queuedHashTypes[100];
    int hashCount;
};

, тогда у вас может быть такая функция, как

* 1007. *

И используйте структуру и функцию примерно так:

int main(void)
{
    struct myStruct aStructure;  // Define a structure object

    aStructure.queuedHashTypes[0] = 0;

    printf("Before calling the function queuedHashTypes[0] is %d\n",
           aStructure.queuedHashTypes[0]);

    myFunction(&aStructure);  // Pass a pointer to the structure

    printf("The function initialized queuedHashTypes[0] to %d\n",
           aStructure.queuedHashTypes[0]);
}

Приведенная выше программа должна напечатать, что queuedHashTypes[0] это 0 до вызова функции и 1 после вызова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...