C добавление к массиву структуры - PullRequest
0 голосов
/ 25 апреля 2018

Итак, из моего понимания C, если вы хотите что-то постоянно изменить внутри функции, вы должны передать указатель в качестве аргумента.Тем не менее, у меня есть этот фрагмент кода, который добавляется к массиву структур без каких-либо указателей.

в каком-то другом файле:

extern struct data *information;

в другом файле:

struct data *information 

в некоторой функции:

information = malloc(sizeof(data));

наконец рассматриваемая функция:

void function(int total, bool status){

        total++;
        char input[30];

        printf("Please enter some input...\n>>>");
        scanf(" %[^\n]s", input);

        //reallocate memory to fit new element
        information = realloc(information,sizeof(struct some_struct)*total); 


        //assign values to struct members
        strcpy(information[total-1].description,input);
        information[total-1].amount = total;


        return;
}

Я проверил эту функцию, добавив некоторый пример и при печати она была там.Мое понимание этого неверно, или это должно произойти?

Ответы [ 2 ]

0 голосов
/ 25 апреля 2018

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

0 голосов
/ 25 апреля 2018

Переменная information не объявлена ​​внутри функции, но вы можете получить к ней доступ.Это означает, что она объявлена ​​как глобальная переменная и доступна из любой точки вашего исходного файла.

Если бы вы объявили эту переменную внутри функции, то вам нужно было бы передать ее адрес в функцию, чтобы изменитьэто.

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