Я превращаю свой проект в C из C ++, и все шло гладко, так как я с самого начала не использовал много функций C ++. Но я столкнулся с особой проблемой, которую мне удалось воспроизвести в небольшой тестовой программе. Это не имеет смысла для меня, поэтому я попытаюсь объяснить с помощью кода.
typedef struct foo
{
int num1;
float num2;
char* name;
}foo;
//This function allocates and initializes a foo object
foo* Initfoo()
{
foo* f = malloc(sizeof(foo));
f->num1 = 1024;
f->num2 = 3.14;
f->name = malloc(100);
strcpy(f->name,"eleos re paidia");
//Just before returning here by checking the f pointer we can see
// it is initialized correctly
return f;
}
void afunctest(foo* f)
{
///... suppose this function does stuff before ...
//here it initializes the foo pointer
f = Initfoo();
///...and after here suppose the function also does more stuff..
//by checking at this point in the program the pointer is still initialized
//correctly to what InitFoo initialized it to
int asd =5;
}
int main()
{
foo* f = 0;
//should do stuff and also initialize the foo* f
afunctest(f);
//when we check here the pointer f is still 0 as if afunctest() function never ran
int asd = 5;
return 0;
}
Итак, в двух словах, мы объявляем указатель foo и инициализируем его нулем. Затем мы передаем этот указатель в функцию afunctest (), которая должна что-то делать, а также инициализировать ее для дальнейшего использования. Внутри функции afunctest () она, кажется, правильно инициализируется, но как только мы вернемся к main (), она все равно будет иметь значение 0, как если бы функция никогда не выполнялась.
Сначала я подумал, что это действительно сложная ошибка в моей исходной программе, поскольку она стала довольно сложной, но возможность ее воспроизвести здесь означает, что я упускаю что-то фундаментальное в использовании указателей в C по сравнению с C ++. Можете ли вы, люди, указать на это? Что я делаю неправильно? Заранее спасибо за любые отзывы.
P.S .: Мой компилятор - GCC под Windows 7.