07.04.2005, 16:14
общий
это ответ
Здравствуйте, ohitmano!
не... погоди... тебе для начала нужно отделить друг от друга понятия параметр и возвр.значение.
1.
значит так:
параметры функции могут передоваться по значению (т.е. функция работает со сзначением параметра)
и по ссылке (ссылку на переменную), т.е. фактически функция получает возможность изменять значения переменных, ей не принадлежащих.
пример1:
int foo(int * a) { return ++(*a); }; // или ++*a, без разницы
void main()
{
int a = 100;
foo(&a); // теперь значение переменной a = 101
}
пример2:
int foo(int a) { return ++a; };
void main()
{
int a = 100;
int b = foo(a); // значение переменной b = 101, a = 100
}
2.
если говорить о возвращении функцией ссылки то нужно понимать, что переменная внутри функции, пренадлежит и существует, только внутри этой самой функции.
здесь функция всётаки вернёт некий адрес, но этой переменной после выхода из функции уже не будет существовать. этот момент можно обойти объявив статическую переменную:
int * foo()
{
static int a = 100;
return &a;
}
т.е. со статическим элементом это прокатит.
а если нужно, чтоб вункция возвращала адрес вновь созданной переменной то так:
int * foo()
{
int * a = (int*) malloc(sizeof(int)); // выделим память
return a;
}
но в этом случае нужно не забыть освободить память от ненужных данных
void main()
{
int * a = foo();
// чего-то с ней делаем
// и когда она нам более не нужна:
free(a);
}
надеюсь доступно объяснил.
удачи!