Итак, из моего понимания 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;
}
Я протестировал эту функцию, добавив несколько примеров, и при печати он был там. Я неправильно понимаю это, или это должно произойти?
Пожалуйста, разместите минимальный воспроизводимый пример.
input - это локаль ... что такое information?
Вы используете глобальные переменные и забываете об этом упомянуть.
@Stargateur ах да, я забыл упомянуть, что информация представляет собой массив структур, сейчас я отредактирую вопрос
@MadPhysicist сейчас отредактирую
@OldProgrammer что нужно изменить? Я добавил несколько обновлений, но что еще?
"информация - это глобальный массив структуры" - затем покажите объявление. Люди здесь не читатели мыслей.
Что вы пробовали напечатать? Как вы назвали функцию? Как вы заявили информацию? Не размещая минимального примера, как можно проанализировать вашу проблему?
struct some_struct.
Считайте, что люди больше сосредоточены на решении вопроса, чем на ответе на него. Это общий вопрос. Должен ли я передать массив структуры в функцию, чтобы изменить его, или можно добавить вот так
Если функция расширяет динамическую последовательность, ей нужен исходный указатель и новый размер. Как вы вернетесь к вызывающей стороне, зависит от вас (параметр вывода указателя на указатель, результат возврата функции или (пожалуйста, не делайте этого) глобальный - это все варианты). вам все равно нужно обновить размер, поэтому я бы использовал первый (все, что передается как аргументы ввода / вывода) и использовал возвращаемое значение как статус ошибки.
@ L2C: в чем проблема с размещением полного кода? Как можно ответить на ваш вопрос, если вы не предоставили полную информацию о своей проблеме. Вы разместили то, что пытались напечатать? Как вы заявили информацию? Технологии не настолько развиты, чтобы можно было увидеть код на вашем ноутбуке и понять вашу проблему.
@kadina не столько проблема в размещении кода. Я хочу иметь возможность применять его ко всем ситуациям. Это проблема? Или я должен опубликовать код и попросить вас изменить его, только чтобы вы ответили, это не служба написания кода.
@ L2C: Не думайте, что все одинаковы. Некоторые скажут, что это не услуга по монтажу кодов. Не каждый.





Переменная information не объявлена внутри функции, но вы можете получить к ней доступ. Это означает, что он объявлен как глобальная переменная и доступен из любого места внутри исходного файла.
Если бы вы объявили эту переменную внутри функции, вам нужно было бы передать ее адрес в функцию, чтобы изменить ее.
Итак, пока массив структуры объявлен глобальным, я могу вносить в него любые изменения (добавлять / удалять / обновлять), и это навсегда, вы говорите?
Глобальная переменная означает, что она доступна всем функциям без перехода к функциям. Не нужно передавать глобальные переменные. Таким образом, переменных не будет в локальном стеке функции. Таким образом, глобальная переменная (в вашем случае информация) может сохранять измененное значение через вызовы функций.
Я удалил часть кода, который не нужен для этого вопроса, поэтому кажется, что статус не используется.