latajacaryba Temat założony przez niniejszego użytkownika |
Niedziałający (?) przykład z artykułu o wskaźnikach. » 2016-07-13 00:25:58 Witam. Od razu mówię, że artykuł nie jest z tej strony, tylko z tej: http://guidecpp.cal.pl/cplus,pointers Autor podał kawałek kodu, który kiedy ja wklejam do programu wyskakuje mi błąd:
long *wsk_uniwersalny; long zmienna_long; int zmienna_int; double zmienna_double; wsk_uniwersalny = &zmienna_long; (int *)wsk_uniwersalny = &zmienna_int; (double *)wsk_uniwersalny = &zmienna_double;
A oto treść błędu: lvalue required as left operand of assignment
Code::Block 16.01
A, jeśli autor źle to napisał lub jest nieaktualne lub jakaś inna opcja proszę o wytłumaczenie jak w inny sposób zmienić typ wskaźnika tzn.
int *x; long y;
i jak zrobić, żeby *x było typu long.
Z góry dziękuję za pomoc. |
|
mateczek |
» 2016-07-13 01:17:57 napisz może co chcesz zrobić?? Bo chyba złą drogę obrałeś #include <iostream> using namespace std;
int main() { unsigned char tablica[] { 0x1, 0xff, 0x1, 0x1, 0x0, 0x1 }; short int * wsk =( short int * ) tablica; for( int i = 0; i < 3; i++, wsk++ ) { cout << hex <<* wsk << endl; } }
|
|
pekfos |
» 2016-07-13 12:14:50 Od razu mówię, że artykuł nie jest z tej strony, tylko z tej: http://guidecpp.cal.pl/cplus,pointers |
Jaka niespodzianka, bzdury na stronie z darmowego hostingu. |
|
latajacaryba Temat założony przez niniejszego użytkownika |
» 2016-07-13 13:57:28 Bzdury? Z tego co widziałem, tylko ta jedna rzecz była błędna. Ale co, nie można tak zrobić? Zmienić np. int *wskaznik
na
long *wskaznik
Jak to zrobić? |
|
Gibas11 |
» 2016-07-13 14:03:12 Po pierwsze taki uniwersalny wskaźnik powinien być typu void* a wartości przypisuje się do niego tak: void * pointer =( void * ) & zmienna;
Po drugie takich rzeczy z reguły się nie używa. Co do kursu – są tam też błędy rzeczowe, „obiekty typu int” i inne kwiatki. //edit: Albo to coś: To w końcu kurs C++ czy C? |
|
latajacaryba Temat założony przez niniejszego użytkownika |
» 2016-07-13 14:26:29 Ok, ale znalazłem coś na wikipedii.
int n = 10; void *p = &n; int *pn = (int *) p; printf("n = %d\n", *pn); (tak na marginiesie, co oznacza to %d?)
dla utłatwienia
int n = 10; void *p = &n; int *pn = (int *) p; cout<<"n= "<< *pn;
rozumiem, że void nie przechowuje ani liczb ani znaków alfanumerycznych i dopiero trzeba jakby nadać mu jakiś inny typ (w tym przypdaku int)? Przepraszam za ewentualne błędne rozumowanie, ale dopiero się uczę c++ i nie wszystko jest dla mnie jasne ;) |
|
carlosmay |
» 2016-07-13 14:33:05 (tak na marginiesie, co oznacza to %d?) | printf |
|
Gibas11 |
» 2016-07-13 14:33:25 "%d" – liczba całkowita ze znakiem w formacie dziesiętnym. //edit @Up, uprzedziłeś mnie. :P
Mniej więcej tak, void* jest wskaźnikiem „na nic” i komputer nic z takimi danymi nie zrobi jeśli nie powiesz mu co to jest. Używać go można do np. wskazywania na duży zbiór danych, ale to już zależy od kontekstu. |
|
« 1 » 2 |