Tak dla porządku wyjaśnię, że zwykłe przypisanie: tablica[i]->imie = "Jan"; jest błędne i niebezpieczne, ponieważ powoduje nadpisanie wskaźnika do pamięci zaalokowanej wcześniej przez malloc(). Działa tylko z pozoru dobrze, ale może nieźle namieszać. Natomiast sposób jaki jest na listingu jest poprawny (z dokładnością do brakujących nawiasów). Sposób...
// tablica "napis" znajduje się w PROGMEM - w kodzie jest pgm_read_byte: OK char napis[] PROGMEM = {"test"}; // zmienna "text"również jest w PROGMEM: wywołanie fun(text.wsk) odwołuje się do złej pamięci t_text text PROGMEM = {napis}; zamień: fun( text.wsk ); na coś pokroju:...
Dodano po 1 w ogóle to nie wiem po co korzystasz z 2ch funkcji jak spokojnie możesz to zrobić w jednej: [syntax=c] #include<stdio.h> #include <stdlib.h> typedef struct{ int x; int y; }polozenieS; int getXvalue(void); //your functions int getYvalue(void); int random(int min, int max); polozenieS* add_structure(void); int main(void) { int...
Należy pamiętać, że w nowszych wersjach avr-libc nie należy używać PROGMEM do deklaracji typu: Typedef Documentation prog_char Note: DEPRECATED This typedef is now deprecated because the usage of the __progmem__ attribute on a type is not supported in GCC. However, the use of the __progmem__ attribute on a variable declaration is supported, and this...
A na czym ta kiszka polega? W gcc dla ARMa działa to co pokazałeś - *(struktura.wsk) = ... 4\/3!!
Chcesz wskaźnik na strukturę, deklarujesz wskaźnik na "char", wiec czemu dziwisz się kompilatorowi że zgłasza błąd? struct mystruct* wsk = &czas; Warto popracować nad podstawami wskaźników w języku C, bo braki wyjdą przy pierwszej nadarzającej się okazji.
Użyj po prostu operatora adresu (&) a następnie dokonaj prostego rzutowania na (unsigned int)
ponieważ operujesz wskaźnikiem na strukturę musisz wskaźnik wyłuskać (komunikat błędu linia 16) i dopiero możesz się odwoływać. Masz dwie opcje: 1/ (*Bufor1).rozmiar=0; 2/ Bufor1->rozmiar=0; Przy stosowaniu operatora u8 i = 2; char* ch = "test"; char ch2 = i[ch]; // kompiluje się i jest równoważne ch[i] Jednocześnie oznacza...
nie jestem specjalistą w ARMach Atmela, dlatego odpowiem Ci tylko na ostatnie pytanie mianowicie co to jest " -> ". Strzałka oznacza wskaźnik do struktury, co oznacza, że pPIO jest wskaźnikiem do struktury zawierającej w sobie element PIO_OER. Ogólnie zastępuje to konstrukcję (*pPIO).PIO_OER.
Witam! Zapis: g->roz oznacza, że jeśli "g" jest wskaźnikiem do struktury bądź unii, to operator "->" odwołuje się do składowej "roz". Ponieważ g wskazuje na strukturę, do składowej "roz" można się odwołać również: (*g).roz Wskaźniki do struktur i unii są jednak tak często używane, że wprowadzono operator "->".
Tak, ale czy w przypadku, który podał kolega Szelus nie jest właśnie tak, że operujemy na wskażnikach do danych w buforze, a nie na kopiach tych danych w strukturze ? To by wyjaśniało, dlaczego zawartość pierwszej struktury jest nadpisywana przez kolejne zapełnienie bufora danymi dla drugiej struktury. Wskażniki w obydwu strukturach wskazują na dokładnie...
męczę się z głupim problemem możliwe że mam zaćmienie umysłu. Mam wskażnik do struktury i zmienną typu void wskazującą na zarezerwowany obszar pamięci przez malloc. Jak dokonać zmiany bieżącego adresu struktury na obszar pamięci zarezerwowny przez maloc? Kompilatór ciągle wywala mi błędy a kiedyś to robiłem tyko mi się zapomniało jak? Poprawiłem i temat...
Witam! Jednym z rozwiązań jest zadeklarowanie pola struktury jako wskaźnika do np LEV-elementowych tablic typu "wskaźnik do char" np tak: [syntax=c]typedef struct { char *opis_msg; char *(*alarmy)[2]; } AL_TABLE;[/syntax]a nastepnie odwoływać się do nich następująco np: [syntax=c]printf("%s\n", (al_tab[2].alarmy[2])[1]);[/syntax] Analizując wiersz z...
Witam, nie można tak realizować inicjalizacji, ponieważ zastępujesz wskaźnik na strukturę wyrażeniem: { {MAIN_SCREEN_ID, MS_BTN_OK_ID,20,20,20,20,(u8*)NU... {MAIN_SCREEN_ID, MS_BTN_ESC_ID,40,20,20,20,(u8*)N... {MAIN_SCREEN_ID, MS_BTN_MENU_ID,60,20,30,20,(u8*)...
Po kiego grzyba Ci pola bitowe? Nie wolno w ten sposób odwoływać się do kolejnych elementów struktury. Działa tylko dlatego, że przy kompilacji włączona jest opcja -fpack-struct . No i po co Ci struktura do trzymania kilku elementów tego samego typu? Od tego są tablice, a jeżeli chcesz koniecznie mieć tam wpisane nazwy, to sobie je możesz zdefiniować...
Dlaczego nie zrobić funkcji typu void a strukturę przekazywać poprzez wskaźnik?
Error[Pe167]: argument of type "FIL volatile *" is incompatible with parameter of type "FIL *" Obawiam się że to wina kompilatora, bo przykład jest zaczerpnięty z ksiązki w której autor używał kompilatora Eclipse. Czy jest na to jakis sposób? :/ Jasne, od razu wina kompilatora. Kompilator poprawnie się zachowuje. Jeśli...
i również przekażę ją do funkcji przez wartość to kompilator może mi ją zoptymalizować i całą tablicę odłożyć na stos? Tablic nie możesz przekazać przez wartość w C tylko przez wskażnik. Tylko struktury i unie (abstrahując od typów podstawowych) są przekazywane przez wartość w C. Więc jak polem struktury będzie tablica to przekazując tę strukturę -...
Jeśli masz wskaźnik na jakąś strukturę to wykonanie delete (*wskaznik_na_wezeł_listy) zwolni pamieć zarezerwowana na całą strukturę. Nie trzeba zwalniac poszczególnych pól. Czyli pierwsze polecenie jest poprawne.
O watch dogu musisz myśleć od razu, bo trzeba program tak napisać, żeby zastosować możliwie mało punktów resetowania WD, optymalnie tylko jeden. A to wymaga, aby w żadnym miejscu program się zbyt długo nie pętlił. O RTC możesz pomyśleć w każdej chwili, to tylko dodatek. Co do menu to pomyśl raczej o strukturze, która zawiera pozycję menu, związane z...
Prawdopodobnie zła wartość wskaźnika/rezerwacja pamięci.
Najlepiej jakby każda wartość wkładana do kolejki była wskaźnikiem (albo strukturą, która ma wskaźnik etc.) na dane. Jest to chyba najwygodniejsze/najprostsze w obsłudze. Żeby nie alokować pamięci non-stop i wciąż można zaadoptować Twój pomysł. Tzn stworzyć bufor raz (nawet nie musi być w takim przypadku dynamiczny) i przekazywać do kolejki strukturę,...
No ciekawe. A gdzie przypisanie tym wskaźnikom wartości? [syntax=c]... }LightBulb={OFF,0};[/syntax] Bo ja nie widzę..... To, że wskaźnik nazwałeś tak samo jak funkcję niczego nie zmienia.
Wszystkie zmienne automatyczne w funkcjach są niszczone po wyjściu z funkcji. Jeśli chcesz, żeby funkcja tworzyła strukturę i ją jakoś zwróciła, to w C zazwyczaj robi się to brzydko: - strukturę deklaruje (lub alokuje) się na zewnątrz funkcji, a do funkcji podaje wskaźnik do niej, żeby funkcja tę strukturę zainicjalizowała; - na zewnątrz funkcji deklaruje...
- Dzielnik napięcia: pozwala dopasować lub wybrać zakres pomiarowy - Filtr: jeżeli dolnoprzepustowy, to eliminuje np. zakłócenia od sieci energetycznej, inny - określa pasmo pomiarowe woltomierza - Wzmaczniacz: najczęściej napięciowy, precyzyjny - dopasowuje/ /normalizuje sygnał pomiarowy do potrzeb przetwornika analogowo cyfrowego - A/C: przetwornik...
Czy do funkcji HAL_UART_Receive_IT na pewno powinien być przekazywany adres wskaźnika do struktury UART_HandleTypeDef?
Rozwiązałem ten problem w prosty sposób tzn. zmieniłem : xdata struct _8bajt *wsk; na : struct _8bajt xdata *wsk; i wszystko działa prawidłowo.
Twoja funkcja musi pobierac wskaznik do struktury GPS. Przykładowo jesli struktora nazywa się strukturaGPS: typedef struct{ int wysokosc; int szerokosc; int czas int packet3[8]; }strukturaGPS; //za jej pomocą tworzysz strukturę GPS: strukturaGPS GPS; //Funkcja bedzie wyglądała tak: void gps_dm_dms(strukturaGPS* GPSpointer...
Nie no... nie jestem aż takim amatorem, żeby nie zdawać sobie sprawy z długości bufora. :) Używam sizeof :) W pliku ee_dbase.h mam takie definicje: #define DBREC_LEN sizeof(t_st_dbrec) // długość bajtowa rekordu danych #define DBROW_LEN 16 // długość wiersza na rekord w bazie A co do wskaźnika, to go sobie wyświetlam przez USART i stąd wiem....
Mam problem z programem. Napisałam go przy użyciu dużej ilości wskaźników do struktury jako argumentów funkcji. Wszystko działa pięknie. Podczas pisania programu stwierdziłam że czemu by nie napisać tego podając do funkcji strukture a nie wskaźnik do niej. Zaczynając zmieniać wszystko, program przestał działać. Jeśli przekazujesz cała strukturę do...
Nie wiem na ile jesteś w stanie ingerować w kod, ale... Cała obsługa transmisji po SPI powinna zostać przeniesiona do funkcji obsługi przerwania od SPI. Funkcje z pętli głównej powinny tylko przekazywać wskaźniki na struktury z danymi i callbackiem do "drivera" SPI. Driver SPI powinien atomowo zbierać te wskaźniki do swojego bufora i inicjować transmisję,...
unsigned char * buf_o = &(Pointer->Buffer_O[0]... WriteFile( hCom, &(Pointer->Buffer_O[0]... ... ); Zmieniłbym nazwę pola Thread na CmdStopThread albo coś podobnego.
Nie wkleiłeś kodu, więc mogę tylko strzelać, że nie alokujesz pamięci na nowe wyrazy, tylko zapisujesz je w tych samych miejscach pamięci, co stare. W rezultacie masz co prawda nową strukturę key_tab, ale z tymi samymi wskaźnikami.
Bardzo wiele zostało już powiedziane (bardzo dobre porady). Moim zdaniem krokiem zero jest jako tako umieć programować w C na PC (jak przebiega proces kompilacji, kod źródłowy podzielony na pliki *.c i *.h, organizacja pamięci i wskaźniki, struktury i wskaźniki do nich, słowa kluczowe register, volatile, static, etc., preprocesor, makefiles i make,...
Niby prosta rzecz, a się wyłożyłem. Compilator Codevision, język C, procesor mało istotny. Jest sobie struktura, która ma siedzieć we flashu. Chcę tą strukturę zainicjalizować w momencie kompilacji (no bo jak inaczej - przecież ma siedzieć we flash'u) : [syntax=c] flash struct _cmdfunction { char *cmd[]; void (*ptrF)(void); } FunctionList={"text1",testip}...
Faktycznie dziwne. :D Program wyświetla 0 1 V A I ♥ ♥ Skoro u Ciebie jest inaczej, to chyba masz jakąś edycję specjalną kompilatora. :P Dodano po 7 W programie tworzysz niepotrzebnie tablicę, której nie zwalniasz.[syntax=cpp]char* dd = new char[sizeof(test)];[/syntax] Dlaczego niepotrzebnie? Bo to[syntax=cpp]dd = reinterpret_cast<char*>(m);[/synta...
A mógłbyś mi jeszcze wyjaśnić tą funkcję? A co tu wyjaśniać? :D To jest funkcja wysyłania danej przez SPI...tylko że dla STM'a. SPI1 - to wskaźnik na strukturę zrzutowaną na obszar pamięci rejestrów SPI, DR to jeden z jej elementów składowych (tutaj akurat rejestr zapisu do bufora).
Nie wsysa, tylko, według mnie, po prostu opuszczają stację. Masz błędne wyświetlanie listy Odjazd - zamiast wyświetlać całą kolejkę, wyświetlasz na stałe cztery pierwsze elementy. Kolejkę czy listę najlepiej obsługiwać iteratorem. [syntax=cpp] for ( deque<rozklad>::iterator Iter = Odjazd.begin, Iter < Odjazd.end, ++Iter ) { cout << Iter->ID...
Ta funkcja nie realizuje mrugania diody. Realizuje odczyt stanu. Jak większość poprawinie napisanych funkcji ze słówkiem Get w nazwie. Natomiast sposób wywołania funkcji z tymi konwersjami to masakra o pomstę do nieba wołająca. Jeśli to wszystko działa to prawdopodobnie przez przypadek. I jeszcze uwaga do ... trzeciej pozycji tablicy request ... adresem...
1. Nie możesz zamieszczać statycznej struktury, którą deklarujesz w niej samej. Poprawny będzie zapis: [syntax=cpp] struct X { int i; double d; X *x; }; [/syntax] jednakże wówczas x jest wskaźnikiem na strukturę typu X. Dzięki temu kompilator jest w stanie określić rozmiar całej struktury. W przypadku statycznej zmiennej występuje problem z nieskończoną...
Daje wskaźnik do właśnie zaallokowanej struktury. Uwaga: taka struktura nie jest zainicjowana!
Jak ja lubię te długie nazwy, niby pomocne a tak naprawdę cholernie mylące... No ale nic. Zobacz co masz w funkcji main(): K * kolejka; kolejka=malloc(sizeof(kolejka)); a powinno być: kolejka=malloc(sizeof(K)); No przecież sizeof(kolejka) to raptem 4 bajty (czy tam ile liczy sobie zwykły pointer, jakim jest kolejka) i gdy potem w funkcji InicjujKolejke()...
znaczyłoby to że zapis &pierwsza to pobranie adresu początku struktury który jest jednocześnie wskaźnikiem do tej struktury, czyli zmienną wskaźnikową, czyli:[syntax=c]Struktura *wskaznik = &pierwsza.[/syntax]
Aby wskazywać na obiekt, najpierw musi on być alokowany w pamięci. Inaczej wskaźnik wkazuje "niewiadomo co" i wywala.
Zastosuje deklarację zapowiadającą.
Inkrementacja wskaznika w tym przypadku jest bledna. Standard C++ mowi, ze operator ++ zastosowany do wskaznika zwieksza jego wartosc o rozmiar struktury (sizeof((PARAM)) Powinienes zrobic tak: printf("aaaa %c \n", wsk12->znak); printf("aaaa %d \n", wsk12->liczba); // *(wsk12+sizeof(char)) Jezeli juz chcesz sie dostac do drugiego pola struktury bez...
Przecież w tej funkcji nie zwracasz wartości przez wskaźnik .... zwracasz typ double. A to nie wskaźnik.... Pewnie chodzi ci o to czy modyfikacja struktury przekazanej przez wskaźnik jako argument funkcji jest poprawna ? - pewnie że poprawna. Ale to tylko modyfikacja argumentu (obojętnie czy typu wskaźnikowego czy nie) .....
Te twoje trzy wskaźniki uimeść w unii - bedziesz miał jeden wskaźnik, do którego odwołasz się przez pola unii. W sturktudrze można użyć volatile i można takiemu polu przypisać zmienną nie-volatile.
Czy kolega miał na myśli taki sposób: Dodano po 20 Jednak się udało. Bardzo dziękuję Do zamknięcia :)
Pozwole sobie nie zgodzić się z kolegą Sam Sung. Skoro do funkcji 1 przekazywany jest wskaźnik do zmiennej typu Lista, a Lista jest wskaźnikiem do struktury to ostatecznie do funkcji 1 przekazywany jest wskaźnik do wskaźnika do struktury. Na to samo wskazuje także wywoływanie tej funkcji: Przekaz(&filmy); //dla funkcji 1 &filmy jest adresem zmiennej...
Indeksy w C zaczynaja sie od zera, czyli 0 - count-1!
Zacznijmy od tego, że funkcje które nic nie zwracają są zawsze typu void ! Tytuł książki na 20 znaków? Eeee....no dobra, czepiam się. Wyprowadzanie znaków ze struktury w strukturze realizuje się w ten sposób: D:\>test Wprowadź dane: Podaj imię : Jak Podaj nazwisko : Tak Podaj rok urodzenia: 1990 Podaj imię : Ąc Podaj nazwisko...
Heh, gdybym tylko znał priorytet operatorów... Pewne jest to, że zapis adc->dat jest równoważny zapisowi (*adc).dat Czyli 'strzałeczką' uzyskujesz dostęp do pól wskaźnika na strukturę/unię , w przeciwieństwie do kropki, dzięki której uzyskujesz dostęp do pól rzeczywistej struktury/unii gdzieśtam w pamięci.
Freddie Chopin : To nie jest aż takie proste. Z tego co ja zrozumiałem, to chodzi o zadeklarowanie typu zmiennej, coś pokroju: [syntax=C]typedef func_t (*func_t)(void *ptr);[/syntax] z tą tylko różnicą, że powyższe się nie kompiluje. Najbliższe rozwiązanie, to zwracanie struktury, wewnątrz której znajduje się wskaźnik na funkcję - strukturę można używać...
Kod który cytuję, nie znaczy to, ze go pochwalam Dodano po 1 W ogóle to chyba użycie samej wartości liczbowej pozyskanej ze wskaźnika jest niezdefinowanym zachowaniem albo przynajmniej specyficzne dla platformy. Głos rozsądku. Myślę że my tu pracowicie rozwiązujemy jaki Problem XY. Różne nieformalności są wynikiem "jakiegoś" pomysłu, a nie źródłem....
Mam taki zestaw struktur: typedef struct FBInvoke { u16 InvokeNo; void (*FBFunctionPtr)(struct FBInvoke); //Pointer do funkcji struct Task *TaskPtr; void *FBStorePtr; //set z xml void *FBRunPtr; //Pamięć dla funkcji }FBInvoke; //Task siedzący w pamięci typedef struct Task { u8 Index; u16 FBcount; u8 FBJcount; bool *FBJsptr;...
Dorzucam opis programu i sterownika: [syntax=c]// Deklaracja struktury danych przechowującej parametry silnika krokowego typedef struct {...} Stepper_t; // Inicjalizacja struktury danych przechowującej parametry silnika krokowego // me - wskaźnik na strukturę przechowującą parametry silnika krokowego // number_of_steps - parametr silnika określający,...
Jeśli masz problem wybrać, to ja zrobię to za Ciebię: Postaraj się wyprowadzić wszystko z jednego portu a jako parametr przekazuj samą maskę. Najlepszy kompromis ze wszystkich możliwych. W przeciwnym przypadku użyj struktury ze wskaźnikami. W podstawowych aplikacjach rozwiązanie ze strukturą powinno być całkiem znośne. Największe straty wydajności mogą...
tak wyglada struktura o nazwie ROM typedefstruct _ROM { const USBD * pUSBD; } ROM; Jak widać w ciele jest tylko wskaźnik do pokazywania na stałą strukture USBD tak wygląda struktura USBD typedefstruct _USBD { void (*init_clk_pins)(void); void (*isr)(void); void (*init)( USB_DEV_INFO * DevInfoPtr ); void (*connect)(uint32_t con); } USBD; natomiast struktura...
Mam problem, gdyż wywala mi cały czas błąd segmentacji, a nie mogę nigdzie znaleźć błędu, gdzie się walnąłem we wskaźnikach czy coś, gdyby ktoś mógł pomóc będę wdzięczny. Program pod linuxa. [syntax=c] #include <stdio.h> #include <stdlib.h> #include <pthread.h> struct argumenty { double x; double eps; double wynik; int p;}; void* wynik(void*...
dokładnie będziesz miał 8 (lub 9, jeśli znaki interpunkcyjne dodać). I na każdym liściu będzie lista słów i ewentualny wskaźnik na kolejne 8.
Najlepszą metodą jest samo-edukacja, jeśli się zastanawiasz czy taki kod czy przeformatowany jest szybszy - rób testy. Dla "hardcorów" - oglądaj kod w assemblerze po kompilacji. Ogólnie twoje pytanie jest bardzo nieprecyzyjne, to czy kod wykonuje się szybciej czy wolniej zależy od mnóstwa czynników! Rozdaj pamięci gdzie jest kod i gdzie są dane, wszelkie...
chart_create 48 2 2 nadal panikuje, ale nie powinieneś używać chart_setVar i chart_setAxis przed chart_create. Nie mają one sprawdzania wartości null, więc przy próbie zapisu nastąpi awaria. Można to zobaczyć na EXCVADDR na zrzucie ekranu. Adres, który został zapisany/odczytany znajduje się w rejestrze EXCVADDR w zrzucie rejestru. Jeśli adres ten wynosi...
To czy gwiazdka jest przy typie, czy przy zmiennej nie ma znaczenia. Jedni stawiają przy typie, bo gwiazdka w tym kontekście oznacza "typ wskaźnikowy na obiekt typu...". Drudzy stawiają przy nazwie zmiennej, bo np: int *a, b; to osobna deklaracja wskaźnika (*a) i zmiennej (b). Do wskaźnika można przypisać adres obiektu. Adres uzyskujesz korzystając...
Ale nie możesz takiej funkcji jako klasowej zapisywać zdaje się... I co wazniejsze - parametrem jest dokładnie adres procedury! function LLKeyHookFunc(HookCode: Integer; KeyCode: wParam; KStrokeInfo: lParam): LResult; stdcall; var Struct: PKbdDllHookStruct; //Wskaźnik do struktury, w której otrzymamy informacje o stanie klawiatury...
Nie wiem jak teraz wygląda bascom, ale kiedy ja zaczynałem programowanie w bascomie składało się tylko z bezmyślnego wykorzystywania gotowych procedur pod postacią poleceń, które nie koniecznie pasują akurat do aktualnego problemu. Nie mówiąc już, że o takich rzeczach ja wskaźniki, definicje, struktury... bascomowwcy mogą poważyć... Co innego C, jednak...
Zapomniałem napisać, że można zrobić obejście. Jeżeli tak naprawdę ktoś nie jest zainteresowany stricte obiektowością, a tylko wykorzystaniem takich zalet jak enkapsulacja i ścisła kontrola danych (bo obiekty wystepują tylko jednoinstancyjnie, jak często w przypadku mikrokontrolerów), to można coś zrobić - kosztem pokręconej składni. Mianowicie można...
Problem polega na zupełnie głupio napisanym programie. Skoro ptr to tablica wskaźników na struktury (czy tam wskaźnik na wskaźnik na strukturę), to tak właśnie powinien być zadeklarowany, a nie void*.... struct xyz; struct xyz *ptr[10]; lub struct xyz **ptr; 4\/3!!
Witam! A'propos "przytyku" Wszystko zawarłem w pierwszej odpowiedzi. Koledzy chyba posto-nabijacze ? A to fragment cytowanej, Twojej pierwszej odpowiedzi: 1. Pobierasz rozmiar tablicy przy użyciu scanf("%d", &rozmiar) zmienna rozmiar jest typu całkowitego. Skoro pobiera się rozmiar tablicy przy pomocy funkcji scanf od razu zakładam, że rozmiar tablicy...
Problem nie tyle,że nie działa, ale jak to zrobić elegancko i z finezją. Jest tak: 1) mam dużo struktur, ale wszystkie takie same struct mier { int d0; int d1; ....itd }; ilość składowych nie gra teraz roli deklaruję potrzebne mi struktury i wskaźnik na nia: struct mier struk1, struk2, struk3,.........., *w_struk; teraz clou programu - muszę działać...
C nie ma dynamicznych typów danych (tzn. normalnie typ danej jest ustalony w czasie kompilacji), co powoduje, że do takich zastosowań się trochę słabo nadaje. W każdym razie, ze strukturami chodzi o to, że jeżeli masz funkcje (dynamicznie zmieniające się, co uzasadnia stosowanie wskaźników) o różnych typach argumentów i różnych typach zwracanych danych,...
Struktury wspólne dla wielu plików źródłowych definiuje się w pliku .h i włącza przez #include "plik.h" A przekazywać można wskaźniki do struktur. Albo zdefiniować zbiór funkcji do operacji na nich.
Zwiększenie wskaźnika na strukturę o jeden spowoduje, że będzie on wskazywał na miejsce w pamięci ZA tą strukturą. 4\/3!!
Tak, będzie to sobie równoważne. Różnica tutaj polega w występowaniu bądź nie słowa kluczowego struct .
przekazujesz strukturę, parametrem jest struktura (wskaźnik na nią). I pracujesz jak na strukturze (z danym wskaźnikiem). To kompilator troszczy się o to, jak zapisana jest struktura i jak zinterpretować twój zapis, aby odwołanie było poprawne. Zawartość struktury nie ma żadnego wpływu na wygląd wskaźnika. On zawsze jest wskaźnikiem na jakiś określony...
Zadeklaruj stałą tablicę w PROGMEM, a ze struktury odnoś się przez wskaźnik.
To rzutowanie to taka informacja, że: "to co odczytałeś spod podanego adresu jest wkaźnikiem do funkcji z takim a takim argumentem i zwracającym to i to" Dobrze? Generalnie tak. Rzutowanie w C to w zasadzie informacja dla kompilatora, że programista wie, co robi. :wink: Z tym typedef to tak: typedef unsigned char (*CallbackFuncPtr_t)(unsigne...
Nie da rady. Zwróć uwagę, że w zasadzie typ argumentu funkcji nie jest taki sam, jak typ zmiennej globalnej (tablica), a tylko kompatybilny (de-facto wskaźnik na tablicę, chociaż to taka namiastka referencji w C). Jedynie możesz "zenkapsulować" obiekt, tzn. stworzyć globalną strukturę ze wskaźnikiem na tablicę i rozmiarem i coś takiego przekazać do...
Do fscanf musisz dać wskaźniki np. &bazza[i].rokprodukcji , marka i model już są wskaźnikami.
Cześć, korzystam regularnie ze struktur, tablic struktur i wskaźników na struktury. Wiem jaka jest różnica między strukturą i unią. Zastanawiam się jednak nad praktycznymi przykładami wykorzystania unii oraz połączenia unii ze strukturami. Czy dysponujecie jakimiś przykładami (embedded), gdzie połączenie unii ze strukturą pokazuje sens tego tandemu?...
Poczytaj o wskaźnikach. Do funkcji musisz przekazać wskaźnik na strukturę.
"Mu?" ;-) Z pomocą operatora + możesz dodać liczbę do wskaźnika - to przesunie wskaźnik o liczba × rozmiar typu po wyłuskaniu. Oczywiście z void* nie przejdzie, bo void* nie da się wyłuskać. Ale w C tak naprawdę nie trzeba rzutować wskaźnika struktury na void*, bo w C istnieje niejawna konwersja wskaźników. Wychodzi na to, że ten wskaźnik void* jest...
Nie zrozumialem dokladnie o co ci chodzi, moze daj kod zrodlowy tego co napisales z tym bledem. Poniej zamieszam kod przedstawiajacy wskaznik do struktury. #include <cstdio> struct jakas_struktura { int jakis_int; char jakis_char; char jakas_tablica[8]; }; jakas_struktura jakas_funkcja(void) { jakas_struktura Stest;...
kod sie nie wysypuje wiec chyba jest dobrze
Używając alokacji dynamicznej i tak musisz używać wskaźników na struktury.
Adres zmiennej _main_ram_start który jest równy wartości 0x20000000 jest rzutowany na wskaźnik na strukturę framebuffer. W konsekwencji wskaźnik fb też przyjmuje adres 0x20000000.
Nie jest przekazywana tablica, tylko wskażnik na jej pierwszy element. Napisanie tablic zamiast wskaźników nic tutaj nie zmienia. Jeśli chcesz by w trakcie wywołania została utworzona kopia, możesz, nieco sztucznie, zawrzeć tablicę w strukturze i taką strukturę przekazac przez wartość jako parametr.
Róznica jest taka, że pierwszy przykład zamienia wskaźniki, a drugi zamienia zawartość struktur. Jeśli np. istaniałyby jeszcze jakieś wskaźniki do obu struktur to dałoby się to rozróżnić.
Ok .. może dla początkującego to może to być troche niezrozumiałe. Wskaźniki , struktury zazwyczaj sprawiają problemy na początku. W tym przypadku można by faktycznie umieścić cały kod w przerwaniu, bo jest go tak niewiele że przerwania na pewno się nie nałożą. Mam nadzieje że sam plik display.c jest przynajmniej trochę zrozumiały. Jeżeli chcesz wytłumaczenia...
Tylko zamiast przekazywać tyle wskaźnikó, ekonomicnziej wychodzi stworzenie struktury, która ma pola odpowiadające poszczególnym parametrom i przekazywać jako argument wskaźnik do takiej struktury. Struktura może przy okazji mieć pola, które przez funkcję będą uzupełniane - od tego już tylko krok do programowania obiektowego i C++. Można też zwracać...
Teoretycznie w C/C++ nie ma problemu i struktura może być zwracana normalnie przez wartość: [syntax=cpp]struct Costam { int pole1; int pole2; }; Costam funkcja( void ) { Costam temp; temp.pole1 = 1; temp.pole2 = 2; return temp; } main() { Costam wynik; [...] wynik = funkcja(); [...] }[/syntax] Jednakże, jeżeli struktura jest duża, to nie jest to zbyt...
[syntax=c] void TableCopy(unsigned char *PointerSource, int LengthDest, unsigned char *PointerDest); struct cmd { unsigned char length; unsigned char addres; unsigned char data[10]; }; unsigned char mem[12] = "Ala ma kota"; int main() { struct cmd commenda={10,20,'a','b','c'}; int j; TableCopy(mem, sizeof(commenda.data), commenda.data+3); for(j = 0;...
No więc zgodnie z definicją "operator wyboru składnika AHB1ENR przez wskaźnik do zmiennej RCC" (wybiera składnik ze struktury gdy używamy wskaźnika do struktury zamiast zwykłej zmiennej) A po mojemu, to mamy sobie jakieś #define RCC_AHB1ENR_GPIOAEN ((uint32_t)0x00000001) i wpisując RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN; "nadpisujemy" bity w rejestrze,...
Witam; mam taki problem. Zrobiłem sobie strukturę w EEPROMIE w której trzymam ustawienia sterownika: [syntax=c]eeprom struct seting { char k; int temp1; long czas; char name[5]; } ustawienia; eeprom struct seting * ptrsr = &ustawienia;[/syntax] Chciałbym w sposób automatyczny , poprzez RS232 ustawić wszystkie pozycje struktury. A więc przykładowo dostaje...
wygląda na to, że potrzebujesz tzw. listy, czyli struktury, która zawiera dane oraz wskaźnik do kolejnej struktury tego samego typu. W momencie tworzenia struktury jednocześnie alokowana jest pamięć dla następnej struktury i wskaźnik do niej jest zapisywany w aktualnie tworzonej strukturze. Tą metodą można stopniowo zwiększać listę rezerwując tylko...
Dr.Vee dzięki za link do tutka. Przejrzałem i widzę czego muszę się jeszcze douczyć (wskaźniki, struktury...) i mogę zacząć studiować GTK. lord_dagoth: jestem ciekawy co to za gierka w konsoli. Jak możesz to zrób screena, żebym mógł zobaczyć możliwości gier w konsoli. Ogólnie jestem ciekawy jak zaprogramować konsolę by nie wyglądała ona tylko na zasadzie...
No właśnie odpowiadałem ci na tamten wątek ale okazało się że w trakcie go zamknąłeś. A pisałem właśnie że nieco inaczej będzie teraz trzeba odczytywać te dane z Flash ale to nie jest jakiś kłopot. Tylko na początek - małe sprostowanie bo robisz troszkę albo hmm bardzo dziwne rzeczy :( co to jest ? [syntax=c]const unsigned char MN01[] PROGMEM="Ustaw...
Ok. Dzięki. Teraz muszę napisać program na ATMege8 i sprawdzić jak się sprawuje ten wskaźnik na strukturę ;] Pytanie czemu w VS mogę używać wskaźników tak: [syntax=cpp]//VS: *(wsk) = 20; *(wsk+1) = 300; //Następny element //Borland: (*(wsk)) = 20; //Bez zewnętrznego () nie idzie (*(wsk+1)) = 300;[/syntax] Muszę jeszcze sprawdzić bo piszę teraz z głowy...
To: jpeg_mem_dest(&cinfo); // store jpeg image in memory ustawia wyjcie danych do pamięci RAM zdaje się. A gdzie jakiś wskaźnik? Czyżby tu: cinfo->dest = (struct jpeg_destination_mgr *) ? jpeg_mem_dest() jest wywoływana przez funkcję compress_jpeg(). Więc w niej należało by szukać tego wskaźnika. Z nagłówka funkcji widać że do funkcji...
A po co? Masz dwie struktury, do nich możesz uzyskać wskaźnik, prawda? Długość struktury uzyskujesz przez sizeof, robisz typecast wskaźnika na char*, co da ci dostęp do poszczególnych bajtów (albo robisz unie) i sobie kopiujesz bajt po bajcie. Jak do tej pory kopiowałeś strukturę do RAM? Przecież dokładnie tak samo, tyle, że używałeś odczytu blokowego...
tablica struktur fotografie struktur przypisanie struktur
amica błysk router cisco ustawienia fabryczne uszkodzony programator whirlpool pralka
traktorek silnik briggs traktorek silnik briggs
Brak komunikacji ze sterownikiem hamulca w Renault Laguna 2 Moment dokręcania panewek VW Bora 2.3 V5 AGZ