Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 5.00
scofielcl
4 / 4 / 0
Регистрация: 11.09.2011
Сообщений: 145
#1

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

11.09.2012, 21:01. Просмотров 1998. Ответов 10
Метки нет (Все метки)

Добрый вечер.

Вопрос следующий , как возвратить из функции 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.
    */
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.09.2012, 21:01
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Возврат значения из функции (C++):

Возврат значения функции - C++
Что такое возврат значения функции? я уже всю голову изломал, что и куда возвращается? в гугле нашёл мол возвращается результат (куда? в...

Неправильный возврат значения функции - C++
При компиляции если значение меньше или равно 100 программа прекращает работу а если значение выше 100 то работает нормально. ...

Возврат копии значения из функции - C++
Сегодня нашел информацию о том, что можно сохранять ссылку на временный объект, например #include &lt;iostream&gt; int foo() { int...

Возврат значения из полиморфной функции - C++
Доброго времени суток всем. Ребят не знаю как правильно сформулировать свой вопрос. Суть вот в чем: В базовом классе Cell определена...

Возврат значения через параметр функции - C++
Пишу функцию,которая должна создавать динамическую матрицу,а затем возвращать ее через параметр. Правильно ли я понимаю,что для этого надо...

Двумерные массивы и возврат значения из функции - C++
Доброго времени суток уважаемые фуромчане! Решил обратиться к более опытным людям ибо сам допереть не могу:) Ситуация вот в чём.Нужно...

10
Leomana
59 / 59 / 5
Регистрация: 29.06.2012
Сообщений: 188
11.09.2012, 21:18 #2
1. Если вы передаете указатель в функцию, и меняете переменную, которая приняла значение того указателя, то и этот указатель там где была вызвана функция изменится... что в общем-то не хорошо наверное))
2. Если хотите возвращать указатель, то функция пишется так: тип_данных * fun(...)
3. Думая, что же такое "ЛС", так ни к чему и не пришла...
Вы хотите возвращать пустой следующий элемент?
1
scofielcl
4 / 4 / 0
Регистрация: 11.09.2011
Сообщений: 145
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; 
    
}
Но я полагаю , код не совсем верен.
0
I.M.
566 / 549 / 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;
}
Чуть опоздал) и, как советовали выше, лучше не менять входной указатель
1
scofielcl
4 / 4 / 0
Регистрация: 11.09.2011
Сообщений: 145
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оздание списка
0
Leomana
59 / 59 / 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оздание списка ЗДЕСЬ забыли поменять наверное
0
scofielcl
4 / 4 / 0
Регистрация: 11.09.2011
Сообщений: 145
11.09.2012, 21:35  [ТС] #7
Цитата Сообщение от I.M. Посмотреть сообщение
Если вам нужно вернуть указатель на последний элемент, то функцию надо объявить так
C++
1
list* create(list *p,int n)//тут надо звездочку после типа поставить
Чуть опоздал) и, как советовали выше, лучше не менять входной указатель
Лучше не менять , на основании чего , какие последствия. ?
0
I.M.
566 / 549 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
11.09.2012, 21:38 #8
Это же объявление функции. Раз сама функция возвращает указатель, то и в ее объявлении это должно быть отражено.
some_type* function() - вернет указатель на объект типа some_type
some_type function() - вернет сам объект типа some_type
т.е. разница есть
1
scofielcl
4 / 4 / 0
Регистрация: 11.09.2011
Сообщений: 145
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оздание списка
Так корректно с точки зрения компилятора.
0
I.M.
566 / 549 / 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);
0
scofielcl
4 / 4 / 0
Регистрация: 11.09.2011
Сообщений: 145
11.09.2012, 21:43  [ТС] #11
Совершенно верно.
0
11.09.2012, 21:43
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.09.2012, 21:43
Привет! Вот еще темы с ответами:

Повторный возврат рандомного значения ,без изменения значения - C++
Добрый день. Пишу простую консольную игру Кости. Есть 4-е функции прорисовки костей (2-е на кости игрока и 2-е на кости ПК). Каждая...

Возврат значения С++ - C++
Hi people! Вот такое задание: 1) Реализовать заданную динамическую структуру данных, с которой можно работать через перегруженные...

Возврат 2 значений из функции с одним вызовом этой же функции - C++
Вообщем где то в какой то игре была хукнута одна функция int function(int arg1,int arg2,int arg3); суть в чем int...

Возврат значения по ссылке - C++
Долго гуглил, но что-то так и не понял. Почему слева от знака = может использоваться только функция, возвращающая ссылку?


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.