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

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

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

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

14.09.2010, 16:39. Просмотров 9008. Ответов 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мощью указателя (C++):

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

Передача указателя функции - C++
Друзья! Need help! Есть пример "Переменный список параметров указателей". В функции подсчитываем среднее арифметическое. Причем,...

Передача указателя функции класса A в класс B - C++
Добрый день! Стоит задача вызывать функцию другого класса в потоке, ну что то типа этого: typedef void (t1::*PTR_FUN)(int);...

Как происходит передача указателя в/из функции - C++
Здравствуйте. Не могу понять некоторые моменты. Как происходит передача указателя в функцию? В вызове функции, в аргумент...

Структуры и функции. Передача указателя на структуру в функцию - C++
Всем привет, ребята! Вообще ничего не соображаю сейчас, так как ночь. А кофе нету. Короче, ближе к делу. Хочу написать функцию, которая...

Передача указателя в качестве параметра функции динамически подключаемой библиотеки .so - C++
Собственно возможно ли такое? Ниже мои потуги (пытаюсь передать ссылку на глобальную переменную a_buf_cash): void...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
14.09.2010, 16:41 #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  [ТС] #3
не так я туп все-таки, я так и делал, компилятор выдает ошибку в функции main в строках

C++
1
2
3
    int sumA = sumOfNum(A);
    int sumB = sumOfNum(B);
    int sumC = sumOfNum(C);
пишет что невозможно преобразовать типы int в int *
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
14.09.2010, 16:47 #4
selevit,
C++
1
int sumA = sumOfNum(&A);
Ну как бэ так, если через указатель то)
selevit
79 / 75 / 3
Регистрация: 08.10.2008
Сообщений: 296
14.09.2010, 16:56  [ТС] #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
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
14.09.2010, 16:59 #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  [ТС] #7
Цитата Сообщение от Lavroff Посмотреть сообщение
Еще бы... Вы же по ссылке передаете, значит изменяется сама переменная. А в функции цикл у вас идет до тех пор пока переменная не равна нулю...
а можно поподробнее =)
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
14.09.2010, 17:03 #8
selevit, Вы уверены, что вам надо по указателю передавать параметры в этом случае?
selevit
79 / 75 / 3
Регистрация: 08.10.2008
Сообщений: 296
14.09.2010, 17:06  [ТС] #9
Цитата Сообщение от Lavroff Посмотреть сообщение
selevit, Вы уверены, что вам надо по указателю передавать параметры в этом случае?

Lavroff, по мне так лучше бы передавать непосредственно, но таково задание =)
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
14.09.2010, 17:16 #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;
}
selevit
79 / 75 / 3
Регистрация: 08.10.2008
Сообщений: 296
14.09.2010, 17:24  [ТС] #11
Спасибо, я уже догадался =) даже кое в чем разобрался с указателями, всем еще раз спасибо за помошь =)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.09.2010, 17:24
Привет! Вот еще темы с ответами:

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

Передача параметров функции - C++
доброго времени суток:) есть программа реализующая метод градиентного спуска. но да это неважно есть функция Norm. значение этой...

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

Передача параметров в функции - C++
Здравствуйте Помогите, пожалуйста, разобраться с передачей параметров. Задание : создать класс &quot;Треугольник&quot;, определить углы и тип...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
14.09.2010, 17:24
Ответ Создать тему
Опции темы

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