NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Pole ukazatel, pomoc

V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Karel Bittal
Člen
Avatar
Karel Bittal:21.11.2015 18:38

Mám funkci

void WER_send(uint8_t (*color)[3])
{
.....
}

která se dá použít třeba takto:

uint8_t eightbit[2][3] ={ {255, 0, 0},{0, 255, 0}};
                WER_send( &eightbit[0]);

Pokud to správně chápu tak funkci se jako parametr předává ukazatel na tříprvkové pole typu uint8_t.
Rad bych funkci předával hodnoty přímo bez proměnné něco jako

WER_send(  &{255, 128, 0} );

což ovšem nefugnuje.

Poradíte jak na to ?

 
Odpovědět
21.11.2015 18:38
Avatar
petr.dar
Člen
Avatar
petr.dar:22.11.2015 1:28

Do deklarace funkce nepiš počáteční hodnoty to je blbost, dosadíš je až za běhu programu v main. Funkce musí být variabilní a pracovat s různými hodnotami. Počet hodnot nejni omezen ( asi ... :-P ) a hodnota je závislá na zvoleném typu proměnné. např.

#include <iostream>
void MojeFunkce(int,int,int);
using namespace std;

int main()
{

    MojeFunkce(10,20,30);
    return 0;
}

void MojeFunkce(int X, int Y, int Z)
{
    cout << "hodnota X je: " << X << endl;
    cout << "hodnota Y je: " << Y << endl;
    cout << "hodnota Z je: " << Z << endl;
}

funkce MojeFunkce přebírá 3 hodnoty a poté je vypisuje.

Nebo můžeš použít typ, který používá několik hodnot najednou, např.

#include <iostream>
typedef int PoleTriHodnot[3];

using namespace std;
void MojeFunkce(PoleTriHodnot &);


int main()
{
    PoleTriHodnot dvojpole[2] = {{255, 0, 0},{0, 255, 0}};
    MojeFunkce(dvojpole[0]);
    MojeFunkce(dvojpole[1]);
    return 0;
}

void MojeFunkce(PoleTriHodnot &X)
{
    cout << "hodnota 1.hodnoty je: " << X[0] << endl;
    cout << "hodnota 2.hodnoty je: " << X[1] << endl;
    cout << "hodnota 3.hodnoty je: " << X[2] << endl;
}

funkce MojeFunkce taky přebírá 3 hodnoty, ale už v jediné proměnné. Ty odkazy (&) tam psát nemusíš, klidně je vymaž, ty použiješ až budeš pracovat s třídami.

 
Nahoru Odpovědět
22.11.2015 1:28
Avatar
Karel Bittal
Člen
Avatar
Odpovídá na petr.dar
Karel Bittal:22.11.2015 14:44

Asi to budu muset trochy dovysvetlit.. Celé to je z Embended světa konkratne z ARM Cortex M3 a funkce WER_send(uint8_t (*color)[3]) je pomněrně komplexní a hlavně odladěna tak, aby dat odesilala s přesností na instrukci, jelikož data musí chodit z chybou max 100ns. Pro tento okamžik berme způsob předávání dat do ní jako neměnný fakt. Ještě snad prozradím, že funkce nastavuje kalibrator a předavaji se ji data o RGB složkách světla. Tyto hodnoty se jednak počítaji "v programu", ale ja bych potřeboval nějak definovat i předeefinované hodnoty, které by šlo snadno používat při psani firmware. Něco jako

#define ORANGE      {255,165,0}
#define TYRKYS      {48,214,200}

WER_send(  &ORANGE );
...
WER_send(  &TYRKYS );

Kdy změřené a předefinované hodnoty barev uložím do hlavičkového souboru.

 
Nahoru Odpovědět
22.11.2015 14:44
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.