Вот пример кода, за которым следует мой вопрос:
#include <stdio.h>
#include <string.h>
struct st {
char stringField[100];
int intField;
};
typedef struct st st;
void test(st *parameterStruct)
{
st localStruct;
strcpy(localStruct.stringField, "HELLO");
localStruct.intField = 5;
*parameterStruct = localStruct;
}
int main()
{
st myStruct;
strcpy( myStruct.stringField, "XXX" );
myStruct.intField = 9;
printf("%s,%i\n", myStruct.stringField, myStruct.intField );
test(&myStruct);
printf("%s,%i\n", myStruct.stringField, myStruct.intField);
return 0;
}
ВЫВОД:
XXX,9
HELLO,5
Я думал, что, поскольку структура "localStruct" была создана внутри функции (не используя malloc), у нее была локальная область действия, и поэтому места памяти, в которых она была сохранена, были свободны переопределить после прекращения выполнения функции. Тем не менее, я попытался запустить эту пробную программу, и она выполнена без проблем. Я думал, что второй оператор печати собирается печатать тарабарщину на экране, так как я назначил "myStruct" локальной переменной "localStruct" (по сравнению с "localStruct" , динамически распределенной). Я знаю, что если localStruct был создан с использованием malloc, таких проблем не было.
Мой вопрос: назначает структурную переменную 'myStruct' (не динамическую локальную переменную) на y с помощью указателя в функции test okay и безопасно делать? Надеюсь, что вопрос очевиден.