Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 26 wrz 2024, o 22:55


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 4 ] 
Autor Wiadomość
PostNapisane: 1 mar 2017, o 18:44 
Offline
Użytkownik

Dołączył(a): 23 sty 2014
Posty: 1081
Pomógł: 73

Witam,
utrwalam wiadomości na temat wskaźników i chciałbym się upewnić czy mam rację.
Mam taki prosty kod jak na listingu poniżej.

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Funkcja fun jako argument przyjmuje wskaźnik na uint32_t, po wejściu do funkcji fun przepisuję do zmiennej lokalnej wartość i wysyłam na terminal wartość 500. Wszystko elegancko działa.

Teraz drugi przypadek. Robię podobnie tylko parametrem jest teraz struktura:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Na poczatku tworzę strukturę, następnie pisze deklarację funkcji. W kolejnym kroku inicjalizuje strukturę i wywołuję w pętli głównej.
Jak poprzednio, w funkcji fun tworzę taki sam typ strukturalny i w kolejnym kroku przypisuję wskaźnik, na wcześniej ustawioną globalną strukturę. Ale przez takie przypisanie: lokalny_parametr = *param; pola struktury się nie "ustawią" na wartości takie jak w zmiennej globalnej prawda?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 mar 2017, o 20:44 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 15 wrz 2013
Posty: 74
Lokalizacja: Sierakowice/Gdańsk
Pomógł: 9

Z tego co wiem, to można zrobić tak jak zrobiłeś. Wszystkie dane zostaną przepisane ze struktury znajdującej się pod adresem "param", do struktury lokalnej "lokalny_parametr". Zmienne samodzielnie zdefiniowanych typów (w tym przypadku struktura) można przepisywać tak samo jak zwykłe zmienne np. jak: int, char, float (z tablicami jest już inaczej).

Ale jak już wyskrobałeś taki fajny przykład, to najlepszym upewnieniem jest uruchomienie również niego i wyświetlenie wyników działania programu na własnej siatkówce oka :D.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 mar 2017, o 22:51 
Offline
Użytkownik

Dołączył(a): 23 sty 2014
Posty: 1081
Pomógł: 73

Hmm... sprawdziłem podobny kod i przepisało... czyli tylko w przypadku tablic jest inaczej, jeśli chodzi o struktury to można je kopiować bezpośrednio lub przez wskaźniki... na to przynajmniej wychodzi :)

------------------------ [ Dodano po: 3 minutach ]

taki kod przetestowałem:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 mar 2017, o 11:18 
Offline
Użytkownik

Dołączył(a): 23 sty 2014
Posty: 1081
Pomógł: 73

Sprawdziłem dokładnie i standard języka C pozwala na kopiowanie dwóch struktur tego samego typu przez operator "=" czyli jeżeli mamy jakąś strukturę stru_A, której składniki sa zainicjowane wartościami i nowo utworzoną strukturę stru_B to można przekopiować wartości składników ze struktury A do B w taki prosty sposób: stru_B = stru_A. Nie wolno jednak porównywać dwóch struktur np. tak: if( stru_A == stru_B).....

Inaczej jest z tablicami, tych nie można tak łatwo przepisywać, jedna do drugiej. Ale jeżeli by się uprzeć to można zamknąć tablice w strukturę i elegancko kopiować jak opisałem powyżej :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 4 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 4 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO