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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 70, средняя оценка - 4.81
selevit
79 / 75 / 3
Регистрация: 08.10.2008
Сообщений: 296
#1

Передача параметров функции с пoмощью указателя - C++

14.09.2010, 16:39. Просмотров 8761. Ответов 10
Метки нет (Все метки)

Всем доброго времени суток, есть обычная функция, возвращающая сумму цифр числа:

C++
1
2
3
4
5
6
7
8
9
10
int sumOfNum(int N)
{
    int sum = 0;
    while(N > 0)
    {
        sum += N%10;
        N /= 10;
        return sum;
    }
}
нужно передать параметры этой функции с помощью указателей, с указателями не дружу вообще, т.к. не со всем понимаю принцип их работы, в теории, можно сказать я кое что понял, но вот с применением на практике - break;

Прошу на примере этой функции объяснить чайнику краткую суть работы указателей, просьба не посылать на гугл или кидать ссылки на википедию и т.п. =) Заранее спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.09.2010, 16:39     Передача параметров функции с пoмощью указателя
Посмотрите здесь:

Передача указателя функции класса A в класс B C++
Передача параметров во виртуальные функции, перегрузка C++
Передача параметров функции в main() C++
Передача указателя в качестве параметра функции динамически подключаемой библиотеки .so C++
Как происходит передача указателя в/из функции C++
C++ Передача параметров функции
C++ Передача указателя функции
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
14.09.2010, 16:41     Передача параметров функции с пoмощью указателя #2
Тест программы в мейне.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
 
int sumOfNum(int* N)
{
        int sum = 0;
        while(*N > 0)
        {
                sum += *N%10;
                *N /= 10;
                
        }
        return sum;
}
 
int main()
{
   int a=123;
   std::cout<<sumOfNum(&a);
   return 0;
}
selevit
79 / 75 / 3
Регистрация: 08.10.2008
Сообщений: 296
14.09.2010, 16:46  [ТС]     Передача параметров функции с пoмощью указателя #3
не так я туп все-таки, я так и делал, компилятор выдает ошибку в функции main в строках

C++
1
2
3
    int sumA = sumOfNum(A);
    int sumB = sumOfNum(B);
    int sumC = sumOfNum(C);
пишет что невозможно преобразовать типы int в int *
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
14.09.2010, 16:47     Передача параметров функции с пoмощью указателя #4
selevit,
C++
1
int sumA = sumOfNum(&A);
Ну как бэ так, если через указатель то)
selevit
79 / 75 / 3
Регистрация: 08.10.2008
Сообщений: 296
14.09.2010, 16:56  [ТС]     Передача параметров функции с пoмощью указателя #5
спасибо, еще вопрос - как сравнить значения функции с разными аргументами, если передавать их функции посредством указателя? вот код main, но работает некорректно, выводит только первую цифру числа с наибольшей суммой чисел

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int main()
{
    setlocale(LC_ALL, "");
    int A,B,C;
    cout << "Введите три числа через пробел: ";
    cin >> A >> B >> C;
    int sumA = sumOfNum(&A);
    int sumB = sumOfNum(&B);
    int sumC = sumOfNum(&C);
    char * resultString = "Число с наибольшей суммой цифр: ";
    if (sumA > sumB && sumA > sumC)
        cout << resultString << A << endl;
    if (sumB > sumA && sumB > sumC)
        cout << resultString << B << endl;
    if (sumC > sumA && sumC > sumB)
        cout << resultString << C << endl;
    return 0;
}
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
14.09.2010, 16:59     Передача параметров функции с пoмощью указателя #6
selevit, Еще бы... Вы же по ссылке передаете, значит изменяется сама переменная. А в функции цикл у вас идет до тех пор пока переменная не равна нулю...

Можно такой изврат сделать:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <iostream>
 
using namespace std;
 
int sumOfNum(int* N)
{
        int sum = 0;
        while(*N > 0)
        {
                sum += *N%10;
                *N /= 10;
                
        }
        return sum;
}
 
int main()
{
        setlocale(LC_ALL, "");
        int A,B,C;
        cout << "Введите три числа через пробел: ";
        cin >> A >> B >> C;
        int A1=A;
        int B1=B;
        int C1=C;
        int sumA = sumOfNum(&A);
        int sumB = sumOfNum(&B);
        int sumC = sumOfNum(&C);
        char * resultString = "Число с наибольшей суммой цифр: ";
        if (sumA > sumB && sumA > sumC)
                cout << resultString << A1 << endl;
        if (sumB > sumA && sumB > sumC)
                cout << resultString << B1 << endl;
        if (sumC > sumA && sumC > sumB)
                cout << resultString << C1 << endl;
        return 0;
}
selevit
79 / 75 / 3
Регистрация: 08.10.2008
Сообщений: 296
14.09.2010, 17:01  [ТС]     Передача параметров функции с пoмощью указателя #7
Цитата Сообщение от Lavroff Посмотреть сообщение
Еще бы... Вы же по ссылке передаете, значит изменяется сама переменная. А в функции цикл у вас идет до тех пор пока переменная не равна нулю...
а можно поподробнее =)
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
14.09.2010, 17:03     Передача параметров функции с пoмощью указателя #8
selevit, Вы уверены, что вам надо по указателю передавать параметры в этом случае?
selevit
79 / 75 / 3
Регистрация: 08.10.2008
Сообщений: 296
14.09.2010, 17:06  [ТС]     Передача параметров функции с пoмощью указателя #9
Цитата Сообщение от Lavroff Посмотреть сообщение
selevit, Вы уверены, что вам надо по указателю передавать параметры в этом случае?

Lavroff, по мне так лучше бы передавать непосредственно, но таково задание =)
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
14.09.2010, 17:16     Передача параметров функции с пoмощью указателя #10
selevit, Ну вообщем я вам скинул вариант.
Еще 1:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <iostream>
 
using namespace std;
 
int sumOfNum(int* N)
{
        int L=*N;
        int sum = 0;
        while(L > 0)
        {
                sum += L%10;
                L /= 10;
        }
        return sum;
}
 
int main()
{
        setlocale(LC_ALL, "");
        int A,B,C;
        cout << "Введите три числа через пробел: ";
        cin >> A >> B >> C;
        int sumA = sumOfNum(&A);
        int sumB = sumOfNum(&B);
        int sumC = sumOfNum(&C);
        char * resultString = "Число с наибольшей суммой цифр: ";
        if (sumA > sumB && sumA > sumC)
                cout << resultString << A << endl;
        if (sumB > sumA && sumB > sumC)
                cout << resultString << B << endl;
        if (sumC > sumA && sumC > sumB)
                cout << resultString << C << endl;
        return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.09.2010, 17:24     Передача параметров функции с пoмощью указателя
Еще ссылки по теме:

C++ Передача параметров в функции
C++ Передача указателя функции
C++ Передача параметров функции
C++ Передача параметров функции
Структуры и функции. Передача указателя на структуру в функцию C++

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

Или воспользуйтесь поиском по форуму:
selevit
79 / 75 / 3
Регистрация: 08.10.2008
Сообщений: 296
14.09.2010, 17:24  [ТС]     Передача параметров функции с пoмощью указателя #11
Спасибо, я уже догадался =) даже кое в чем разобрался с указателями, всем еще раз спасибо за помошь =)
Yandex
Объявления
14.09.2010, 17:24     Передача параметров функции с пoмощью указателя
Ответ Создать тему
Опции темы

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