Здравствуйте! Можно ли сделать так на Си: int mas[2]; mas = func(); чтобы функция возвратила массив из двух целых. Если можно, то как описать данную функцию? Зарание спасибо!
Может пойдет? Почти похоже.
#include <stdio.h>
int * f(){
int a[2]={4,5};
int *p=a;
return p;
}
int main(){
int * ptr=f();
printf("1: %d\n2: %d\n",ptr[0],ptr[1]);
return 0;
}
vikeng:
Нельзя так делать!
> Программа рабочая, все компилируется и работает.
А ты еще чего-нибудь вызови, она и перестанет работать.
Например, попробуй такое у себя прогнать:
#include <stdio.h>
#include <stdlib.h>
int * f(){
int a[2]={4,5};
int *p=a;
return p;
}
int main(){
int * ptr=f();
printf("%s!Never return pointer to local variable!!\n",
getenv("LOGNAME"));
printf("1: %d\n2: %d\n",ptr[0],ptr[1]);
return 0;
}
> Ничего. Программа рабочая, все компилируется и работает.
Ёлки-палки, я в шутку предостерёг от выдачи адреса локальной переменной на стеке, а ты мало того что так сделал, ещё и полагаешь нормальным.
1)Локальная переменная размещается в стеке функции, т.е. в области памяти, закреплённой за функцией _только_ на время её вызова.
2)После возврата управления в вызвавшую функцию область памяти, которую занимала локальная переменная, с большой вероятностью затрёт что-нибудь ещё, она никак не удерживается за переменной.
3)Правильно будет, использовать функцию выделения памяти в куче (malloc, calloc, new, ещё что-нибудь) и работать с ней.
Вроде в чистом С нет разницы между указателями и массивами но возвратить из функции можно только ссылку на глобальный объект или указатель на память выделенную внутри тела функции