Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Niedziałający (?) przykład z artykułu o wskaźnikach.

Ostatnio zmodyfikowano 2016-07-13 14:57
Autor Wiadomość
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.
P-149869
mateczek
» 2016-07-13 01:17:57
napisz może co chcesz zrobić?? Bo chyba złą drogę obrałeś
C/C++
#include <iostream>
using namespace std;

int main()
{
    //programik w stylu odebrałem bufor bajtów z urządzenia i chciałbym ten bufor zinterpretować jako liczby WORD
    unsigned char tablica[] { 0x1, 0xff, 0x1, 0x1, 0x0, 0x1 };
    short int * wsk =( short int * ) tablica; //przy rzutowaniu trzeba wiedzieć co się robi
    for( int i = 0; i < 3; i++, wsk++ ) {
        cout << hex <<* wsk << endl; // na hex najlepiej widać, że takie rzutowanie odwraca kolejność bajtów (w PC bajty zapisywane są w pamięci od tyłu - nie wszystkie urządzenia tak mają !!!)
    }
}
P-149870
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.
P-149880
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ć?
P-149885
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:
C/C++
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ś:
C/C++
int * wsk = NULL; //można też napisać: int *wsk = 0;
To w końcu kurs C++ czy C?
P-149887
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 ;)
P-149889
carlosmay
» 2016-07-13 14:33:05
(tak na marginiesie, co oznacza to %d?)
printf
P-149890
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.
P-149891
« 1 » 2
  Strona 1 z 2 Następna strona