C добавление в массив структуры

Итак, из моего понимания 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;
}

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

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

L2C 25.04.2018 20:43

Пожалуйста, разместите минимальный воспроизводимый пример.

OldProgrammer 25.04.2018 20:44
input - это локаль ... что такое information?
Stargateur 25.04.2018 20:45

Вы используете глобальные переменные и забываете об этом упомянуть.

Mad Physicist 25.04.2018 20:45

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

L2C 25.04.2018 20:46

@MadPhysicist сейчас отредактирую

L2C 25.04.2018 20:47

@OldProgrammer что нужно изменить? Я добавил несколько обновлений, но что еще?

L2C 25.04.2018 20:49

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

OldProgrammer 25.04.2018 20:51

Что вы пробовали напечатать? Как вы назвали функцию? Как вы заявили информацию? Не размещая минимального примера, как можно проанализировать вашу проблему?

kadina 25.04.2018 20:51
"информация - это массив структур" - невозможно. Собственные массивы не могут быть целью присваивания. В лучшем случае это указатель на динамическую последовательность struct some_struct.
WhozCraig 25.04.2018 20:52

Считайте, что люди больше сосредоточены на решении вопроса, чем на ответе на него. Это общий вопрос. Должен ли я передать массив структуры в функцию, чтобы изменить его, или можно добавить вот так

L2C 25.04.2018 20:53

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

WhozCraig 25.04.2018 20:56

@ L2C: в чем проблема с размещением полного кода? Как можно ответить на ваш вопрос, если вы не предоставили полную информацию о своей проблеме. Вы разместили то, что пытались напечатать? Как вы заявили информацию? Технологии не настолько развиты, чтобы можно было увидеть код на вашем ноутбуке и понять вашу проблему.

kadina 25.04.2018 20:57

@kadina не столько проблема в размещении кода. Я хочу иметь возможность применять его ко всем ситуациям. Это проблема? Или я должен опубликовать код и попросить вас изменить его, только чтобы вы ответили, это не служба написания кода.

L2C 25.04.2018 20:59

@ L2C: Не думайте, что все одинаковы. Некоторые скажут, что это не услуга по монтажу кодов. Не каждый.

kadina 25.04.2018 21:05
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
15
1 136
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

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

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

Итак, пока массив структуры объявлен глобальным, я могу вносить в него любые изменения (добавлять / удалять / обновлять), и это навсегда, вы говорите?

L2C 25.04.2018 21:01

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

Другие вопросы по теме