Diskuze: Pomoc(pole a pointery)
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 16 zpráv z 16.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.
kazdy prvok pola bude 1 lebo vo for loope kazdui iteraciu deklarujes i s hodnotou 0 , potom ho incrementujes , a potom tu hodnotu hodis do pola.
Sprav si globalny counter , resp mimo for loope scope
Jo to ma nenapadlo super.Len stále to akosi nefunguje To i som si deklaroval nad cyklus for.
#include<iostream>
using namespace std;
int main() {
int *pole = new int[6];//Vytvorenie pola 5prvkov,Alokalizacia 5 intov
int *p_pomocny = NULL;
int i = 0;
for(p_pomocny = pole; p_pomocny < pole + 6; p_pomocny++)
{
i++;
*p_pomocny = i;
cout << *pole << endl;
cout << "Hodnota i: " << i << endl;
}
Ještě detail, nepouzivej k vymazání pointeru makro NULL. NULL je ve výsledku nula. Místo toho ma C++ klíčové slovo nullptr. NULL se by se melo používat spis v C.
A co konkrétně Ti na tom nefunguje? Možná se diviš, proč to vypisuje stále stejný číslo. Je to tím, zenedefinujes index v poli, který se ma vypsat.
No mam problém stým že mi to vypisuje stale to isté čislo ked nechám vypísať prvky pola
A ako teda spravím aby mi vypisovalo každý prvok pola ? *pole[i] ? či to nie ?
Jo, musíš dereferencovat hodnotu na zadaném indexu. Správně by to mělo být:
*(pole[i])
To mam napísať pri výpise v cykle ? Nie ?
Možná chceš spíše napsat:
cout << *p_pomocny << endl;
nebo, pokud chceš vypsat právě zaplněnou položku pole:
cout << pole[p_pomocny - pole] << endl;
Už som to vyriešil tak že som pole vypísal pomocou for.Môžem to takto vypisovať keď pracujem s pointerami ?
for(int i = 0; i < 6; i++)
{
pole[i];
}
vyzkoušej a uvidíš:-) ...ale ano, můžeš, nebo můžeš místo pole[i] napsat *(pole+i);
Jinak když napíšeš pole, je to adresa počátku (typově int*), pole+i je adresa i-tého prvku v poli, tj jeho hodnotu získáš dereferencí (*(pole+i)).
Radek Chalupa
Ďakujem za rady, čiže *(pole+i); je z hladiska rýchlosti programu lepšia alternatíva ako pole[i] ? Chápem to správne ? Robíte aj online poradenstvo ? Myslím to v tom zmysle že ak by som náhodou niečo nepochopil z "online návodov" vysvetlili by ste mi to cez skype ? Ak áno aká je cena ? Kľudne sa mi môžte ozvať do SZ. Ďakujem
Doporučuju vyzkoušet zkompilovat obě varianty a prohlédnout vyslednej output hexem.
Vyjde to nastejno, resp. striktně řečeno záleží jak to sestaví ten který kompilátor a linker. Samozřejmě výsledek (v assembleru a strojovém kódu) se bude lišit podle sestavení release vs debug. Kromě porovnání binárního kódu jak zmínil kolega výše, můžeš (v release sestavení nejlépe) dát na příslušné místo breakpoint a při zastavení zvolit "goto disassembly" (nebo něco podobného podle IDE které používáš) a uvidíš výsledek v assembleru.
Radek Chalupa
Zobrazeno 16 zpráv z 16.