Вот пример.
Код:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int *wrong_func()
{
int b[6] = {0, 1, 2, 3, 4, 5};
int *ptr;
ptr = &b[0];
return ptr;
}
int *solve_func()
{
int *b;
int i;
b = (int *)malloc(sizeof(int) * 6);
for (i = 0;i < 6; i++)
b[i] = i;
return b;
}
void main()
{
int *c;
int i;
c = wrong_func();
for(i = 0;i < 6; i++)
printf("%d ",c[i]);
printf("\n");
c = solve_func();
for(i = 0;i < 6; i++)
printf("%d ",c[i]);
printf("\n");
free((void *)c);
getchar();
}
Первая функция wrong_func возвращает указатель на массив, который указывается внутри этой функции. Как видно, возвращается непонятно что. Дело в том, что этот массив создается только для этой функции (я не хочу углублятся в принципы организации памяти) и, следовательно, значения будут иметь место только в ней. Намного проще использовать динамический массив, например, как в функции solve_func, который создается и иницилизируется внутри неё. Дело в том, что динамический массив создается (функция malloc)«глобально» и будет действителен, пока не будет вызвана функция free (будет уничтожен). Надеюсь, понятно изложил. Хотя, всё-таки, присоединяюсь к мнению
hasherfrog, про то, что книжки надо читать. Желательно без чьей-либо помощи. Проще говоря, разобраться самому.