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

Сохранить значение возвращаемое функцией - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Цикл while http://www.cyberforum.ru/cpp-beginners/thread959860.html
Подскажите пжл как корректно сделать,так как он повторяет текст. #include <iostream> #include <windows.h> #include <stdio.h> using namespace std; int main() { SetConsoleCP(1251);...
C++ Русский язык Нужно написать программу, которая исправляла бы ошибки после Ж,Ч,Ш,Щ(Ы,Я,Ю на И,А,У). Учитывая исключения: Жюри, Брошюра, парашют. Помогите вот код, но почему он не работает? #include <conio.h>... http://www.cyberforum.ru/cpp-beginners/thread959850.html
Создать структуру данных о планете C++
Создать структуру, в которой будут храниться данные о некоторой планете: код планеты (целое число), радиус планеты, масса планеты, скорость движения вокруг звезды. Описать функции ввода-вывода данных...
C++ Из геометрии в физику.Замена формул
Движение планеты по кругу,расчитывается через сферическую систему координат: glBegin(GL_LINES); for(int i=0; i<=500; i++) { glColor3f(0.0,0.3,0.1);...
C++ по этой формуле вычисляются координаты,но что это за формула? http://www.cyberforum.ru/cpp-beginners/thread959818.html
for(int i=0; i<=500; i++) (0+cos(i/3.14)*20+sin((-neptune_speed*3.14)/180)*440, 0+sin(i/3.14)*20+cos((-neptune_speed*3.14)/180)*380);
C++ Объясните, пожалуйста, данный код Здравствуйте, объясните пожалуйста построчно данный код. Задача: В одномерном массиве исключить все вхождения заданного числа. Массив уплотнить и напечатать результат. int main() { ... подробнее

Показать сообщение отдельно
NanoChely
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 48

Сохранить значение возвращаемое функцией - C++

22.09.2013, 18:29. Просмотров 263. Ответов 0
Метки (Все метки)

Есть 2-е функции. 1-я dectohex() перекодирует десятичный в шестнадцатеричный код и возвращает символьный массив. Все исправно работает. 2-я функция rgbtohex(), с помощью 1-й функции формирует HEX цвет из получаемого RGB.
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
38
39
40
41
42
43
44
45
46
47
48
char* dectohex(int dec){
    int mod;
    static int i = 0;
    static int index = 0;
    static char heks[3];
 
    i++;
 
    mod = dec%16;
    dec = dec/16;
 
    if(mod==10) heks[index] = 'A';
    else if(mod==11) heks[index] = 'B';
    else if(mod==12) heks[index] = 'C';
    else if(mod==13) heks[index] = 'D';
    else if(mod==14) heks[index] = 'E';
    else if(mod==15) heks[index] = 'F';
    else heks[index] = mod+'0';
 
    if(dec==0) {
        int a;
        char temp1,temp2;
        for(a=0;a<index;a++){
            temp1 = heks[index];
            temp2 = heks[a];
            heks[a] = temp1;
            heks[index] = temp2;
            index--;
        }
        heks[i] = '\0';
        return heks;
    }
 
    index++;
 
    dectohex(dec);
}
 
void rgbtohex(int r, int g, int b){
    char *rH,*gH,*bH;
    rH = dectohex(r);
    gH = dectohex(g);
    bH = dectohex(b);
    if(strlen(rH)==1) rH[1] = rH[0];
    if(strlen(gH)==1) gH[1] = gH[0];
    if(strlen(bH)==1) bH[1] = bH[0];
    cout<<"HEX: #"<<rH<<gH<<bH<<endl<<endl;
}
Проблема заключается в 3-х этих строках:
C++
1
2
3
rH = dectohex(r);
gH = dectohex(g);
bH = dectohex(b);
Т.к. функция dectohex имеет тип char*, то и переменные которые принимают результат функции должны иметь тип char*, насколько я знаю все переменные типы которых имеют звездочку являются указателями. То есть rH,gH,bH просто ссылаются на ячейку памяти и в итоге все эти 3 указателя указывают на одну и туже ячейку и возвращают одно и тоже значение ( то есть последнее сгенерируемое функцией значение ). Объясните как мне все-таки ПРИСВОИТЬ значение? А также как в c++ возвращать из функции массив символов, чтоб он не был указателем.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.