Używanie wskaźnika który jest polem struktury.
Ostatnio zmodyfikowano 2017-03-09 08:05
lukas090894 Temat założony przez niniejszego użytkownika |
Używanie wskaźnika który jest polem struktury. » 2017-03-08 21:27:43 Witam, jestem początkującym i mam pewien problem, szukałem dosyć dużo już na ten temat, ale nie znalazłem jeszcze odpowiedzi. Otóż problem jest taki: mam strukture:
typedef struct {
char* pointer; } Foo;
która jest implementowana w taki sposób:
Foo foo; char table[100];
później przypisuję w innej funkcji wskaźnik do zmiennej table:
foo -> pointer = table;
i teraz nie wiem jak coś zapisać pod tym wskaźnikiem, próbowałem tak:
foo -> * pointer = 'c';
ale kompilator wyrzuca błędy. Próbowałem też tak:
*foo.pointer = 'c'; ale w ten sposób nie mogę bo do funkcji podaję wskaźnik do instancji struktury.
Znajdzie się jakieś rozwiązanie tego? Pozdrawiam.
|
|
Bielan |
» 2017-03-08 21:41:36 typedef struct { char * pointer; } Foo;
Jest to zapis typowy dla C. W C++ nie trzeba używać słowa kluczowego typedef / która jest implementowana w taki sposób:
|
To nie jest jej implementacja a instancja. ale w ten sposób nie mogę bo do funkcji podaję wskaźnik do instancji struktury. |
Próbowałeś odnieść się jak do tablicy? |
|
lukas090894 Temat założony przez niniejszego użytkownika |
» 2017-03-08 21:54:22 Dziękuję za odpowiedź, a co do problemu: właśnie piszę to w C.
A z tym "odnieść się jak do tablicy" mógłbyś rozwinąć? Bo np. jeśli chcę zwiększyć adres w wskaźniku to wystarczy, że napiszę:
foo -> pointer++;
i to działa w debugerze, tylko nie mogę się dobrać do tego na co wskazuje wskaźnik. |
|
Bielan |
» 2017-03-08 21:56:04 char tab[ 100 ]; tab[ 10 ] = 'b';
foo->pointer = tab; foo->pointer ??? = 'b';
|
|
lukas090894 Temat założony przez niniejszego użytkownika |
» 2017-03-08 22:03:38 A co rozumiesz pod "???"? |
|
Bielan |
» 2017-03-08 22:05:30 To właśnie była zagadka dla Ciebie :P |
|
mateczek |
» 2017-03-09 08:05:41 #include <iostream> struct Foo { char * pointer; };
int main() { char tab[ 10 ]; Foo fo; fo.pointer = tab; fo.pointer[ 0 ] = 'a'; *( fo.pointer + 1 ) = 'b'; fo.pointer[ 2 ] = 'c'; *( fo.pointer + 3 ) = '\0'; std::cout << fo.pointer << std::endl; }
|
|
« 1 » |