Форум программистов, компьютерный форум CyberForum.ru

Возврат значения из функции - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 5.00
scofielcl
4 / 4 / 0
Регистрация: 11.09.2011
Сообщений: 143
11.09.2012, 21:01     Возврат значения из функции #1
Добрый вечер.

Вопрос следующий , как возвратить из функции create последнее значение ЛС , чтоб в дальнейшем использовать в main.
newfile.h
C++
1
2
3
4
5
6
7
8
struct list {
    int inf;
    list *first;
    list *next;
    list *end;
};
 
list create(list *p,int n); //cоздание списка
main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include "newfile.h"
 
list first;
list end;
 
int main() {
    srand(time(NULL));
    int n , namber ,i; // n число элементов i бегунок 
    cout<<"Число элементов :"<<endl;
    cin>>n;
    
 
    list *first = new list;
    list *p= first;
    p->inf = rand()%10; // первый элемент
 
   end = create(p,n);//функция создания ЛС
newfile.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
list create(list *p,int n){
    int i;
        for(i=1;i<n;i++){
        p->next = new list;
        p= p->next;
        p->inf = rand()%10;
        
    }
   /*     if(i=n-1){
        list *end = new list;
        list *p = end;
        }
    return p; // т.е ссылку на последний эл-т  я хотел бы возвратить в main , и просвоить end.
    */
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Leomana
58 / 58 / 5
Регистрация: 29.06.2012
Сообщений: 188
11.09.2012, 21:18     Возврат значения из функции #2
1. Если вы передаете указатель в функцию, и меняете переменную, которая приняла значение того указателя, то и этот указатель там где была вызвана функция изменится... что в общем-то не хорошо наверное))
2. Если хотите возвращать указатель, то функция пишется так: тип_данных * fun(...)
3. Думая, что же такое "ЛС", так ни к чему и не пришла...
Вы хотите возвращать пустой следующий элемент?
scofielcl
4 / 4 / 0
Регистрация: 11.09.2011
Сообщений: 143
11.09.2012, 21:23  [ТС]     Возврат значения из функции #3
ЛС - линейный список.
В функцию я передаю адрес первого элемента , после мне нужен адрес последнего эл-та , чтобы продолжить данный список в другой функции.

Добавлено через 3 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
list * create(list *p,int n){
    int i;
        for(i=1;i<n;i++){
        p->next = new list;
        p= p->next;
        p->inf = rand()%10;
        
    }
 
    return p; 
    
}
Но я полагаю , код не совсем верен.
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
11.09.2012, 21:25     Возврат значения из функции #4
Если вам нужно вернуть указатель на последний элемент, то функцию надо объявить так
C++
1
list* create(list *p,int n)//тут надо звездочку после типа поставить
полностью функция выглядит так
C++
1
2
3
4
5
6
7
8
9
10
11
list* create(list *p,int n)
{
    int i;
        for(i=1;i<n;i++){
        p->next = new list;
        p= p->next;
        p->inf = rand()%10;
        
    }
   return p;
}
Чуть опоздал) и, как советовали выше, лучше не менять входной указатель
scofielcl
4 / 4 / 0
Регистрация: 11.09.2011
Сообщений: 143
11.09.2012, 21:30  [ТС]     Возврат значения из функции #5
newfile.cpp:11: error: new declaration ‘list* create(list*, int)’
newfile.h:21: error: ambiguates old declaration ‘list create(list*, int)’

11 строка : list* create(list *p,int n){
21 строка : list create(list *p,int n); //cоздание списка
Leomana
58 / 58 / 5
Регистрация: 29.06.2012
Сообщений: 188
11.09.2012, 21:32     Возврат значения из функции #6
C++
1
2
3
4
5
6
7
8
struct list {
    int inf;
    list *first;
    list *next;
    list *end;
};
 
list create(list *p,int n); //cоздание списка ЗДЕСЬ забыли поменять наверное
scofielcl
4 / 4 / 0
Регистрация: 11.09.2011
Сообщений: 143
11.09.2012, 21:35  [ТС]     Возврат значения из функции #7
Цитата Сообщение от I.M. Посмотреть сообщение
Если вам нужно вернуть указатель на последний элемент, то функцию надо объявить так
C++
1
list* create(list *p,int n)//тут надо звездочку после типа поставить
Чуть опоздал) и, как советовали выше, лучше не менять входной указатель
Лучше не менять , на основании чего , какие последствия. ?
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
11.09.2012, 21:38     Возврат значения из функции #8
Это же объявление функции. Раз сама функция возвращает указатель, то и в ее объявлении это должно быть отражено.
some_type* function() - вернет указатель на объект типа some_type
some_type function() - вернет сам объект типа some_type
т.е. разница есть
scofielcl
4 / 4 / 0
Регистрация: 11.09.2011
Сообщений: 143
11.09.2012, 21:38  [ТС]     Возврат значения из функции #9
main.cpp
C++
1
 list *end = create(p,n);
newfile.h
C++
1
list * create(list *p,int n); //cоздание списка
Так корректно с точки зрения компилятора.
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
11.09.2012, 21:42     Возврат значения из функции #10
Эм, это вопрос?) В итоге все будет выглядеть как-то так:
C++
1
2
3
4
5
6
//newfile.cpp
//...
list * create(list *p,int n)
{
//тело функции
}
C++
1
2
3
//newfile.h
//...
list * create(list *p,int n);
C++
1
2
3
//main.cpp
//...
list* end = create(p, n);
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.09.2012, 21:43     Возврат значения из функции
Еще ссылки по теме:

Неправильный возврат значения функции C++
Возврат значения функции C++
C++ Возврат значения из operator=

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
scofielcl
4 / 4 / 0
Регистрация: 11.09.2011
Сообщений: 143
11.09.2012, 21:43  [ТС]     Возврат значения из функции #11
Совершенно верно.
Yandex
Объявления
11.09.2012, 21:43     Возврат значения из функции
Ответ Создать тему
Опции темы

Текущее время: 17:11. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru