Witam i witam ponownie.
W tym wykładzie chcę porozmawiać o używaniu wskaźników i struktur, o tym,
jak są one powiązane.
Możemy mieć elementy wewnątrz struktury jako
wskaźnik, a wtedy możemy również sprawić, że nasze struktury będą wskaźnikami.
Dwie bardzo przydatne koncepcje.
Tak więc struktura jest tutaj ważna. C pozwala na wskazanie dwóch struktur.
Więc kiedy tworzymy zmienną o strukturze typu, możemy utworzyć
ją jako wskaźnik.
Wskaźniki do struktur są łatwiejsze do manipulowania niż same struktury.
Więc znowu, jest to coś w
rodzaju notacji, znacznie upraszcza i jest bardziej wydajne.
W niektórych starszych implementacjach języka
c struktura nie
może być przekazana jako argument funkcji, ale
wiemy, że wskaźnik tak. Jest to więc kolejny
powód, dla którego chcesz, aby struktura była wskaźnikiem, kiedy
ją deklarujesz, ponieważ wtedy możesz ją przekazać w starszych wersjach
c, możesz przekazać ją jako argument do funkcji.
Nawet jeśli możesz przekazać strukturę jako argument, przekazywanie
wskaźnika jest bardziej wydajne.
Wiemy, że to bardziej wydajne. Mówiliśmy o tym w przeszłości,
jak przemijanie ważnych może być bardziej efektywne.
W tym przypadku jest to
jeszcze bardziej wydajne, ponieważ jeśli przekazujesz całą strukturę, jeśli
struktura jest duża i zawiera wiele elementów,
kopiujesz wszystkie elementy w strukturze do tego parametru.
Jeśli przekazujesz wskaźnik, po prostu kopiujesz adres.
Dlatego jest to jeszcze ważniejsze w przypadku
wskaźników jako argumentów, które mają strukturę, ponieważ struktury mogą być duże.
Tak wiele reprezentacji danych używa struktur zawierających wskaźniki do
innych struktur.
Zobaczysz to często we wszystkich strukturach
programów c, które są wskaźnikami, z powodów, o których wspomnieliśmy.
Fakt, że możesz przekazać je jako parametry w starszych wersjach,
aby zobaczyć, a także jest to bardziej wydajne,
ponieważ robimy wszystko, aby przekazać wartość, która jest
znacznie wydajniejsza w kopiowaniu adresu
niż kopiowanie wszystkich elementów tej dużej struktury.
Tak więc deklarowanie struktury jako wskaźnika jest całkiem proste.
Kiedy definiujesz zmienną jako wskaźnik do przekreślenia, po prostu używasz tej gwiazdki
po typie danych.
Powiedzieliśmy, że struktury są naprawdę nowego typu.
W tym przypadku nasza zawsze ważna struktura dat.
Po prostu mówimy struct date, a następnie używamy wskaźnika daty z
gwiazdką i prawdopodobnie będziesz chciał zainicjować to na null.
Ponieważ pamiętaj, kiedy mówisz struct date pointer date struct
date date pointer, która nie alokuje żadnej
pamięci, tworzy pamięć do przechowywania rzeczywistego wskaźnika.
To nie jest tworzenie pamięci dla znajdujących się w nim danych.
Więc możesz albo
przypisać do tego punktu daty lub adresu innej daty o
strukturze, albo możesz przydzielić dla niego pamięć gdzie indziej,
albo możesz również zainicjować ją
pewnymi danymi w ten sposób.
Tak więc zmienny wskaźnik daty może być przypisany tak jak inne
wskaźniki, możesz ustawić go tak, aby wskazywał na
dzisiejszą datę za pomocą instrukcji przypisania, więc gdybyśmy mieli już deklarację dzisiejszej daty.
Po prostu użylibyśmy znaku ampersand, aby uzyskać jego adres.
Więc tworzymy normalną strukturę date i jest to dzisiejsza data.
To stworzyłoby pamięć dla trzech elementów.
A potem tworzymy nasz wskaźnik i przypisujemy
mu adres drugiej daty.
Całkiem proste. Zrobiliśmy to ze zwykłymi typami danych,
nie inaczej jest, gdy robisz to ze strukturami.
Następnie możesz pośrednio uzyskać dostęp do dowolnego elementu członkowskiego struktury danych wskazywanego przez wskaźnik daty.
Musielibyśmy więc zrobić coś takiego.
Jeśli chcesz uzyskać dostęp do elementu
struktury wskaźnika dnia, musisz najpierw usunąć odniesienie do niego.
Dlatego prawdopodobnie przydatne byłoby umieszczenie go w nawiasach, aby było to bardzo proste.
Musisz usunąć odniesienie do wskaźnika daty, aby uzyskać
wartość tego, na co
wskazuje dzisiejsza data, wartość adresu dzisiejszej daty, na
którą wskazuje, aby ustawić określone wartości.
Więc usuniesz odniesienie do niego,
a następnie zrobisz dzień kropki równy 21, co przypisze 21 do twojego
wskaźnika dnia.
Powyższe mówi tylko o tym, na co wskazuje dzisiejsza data, chcemy
uzyskać dostęp do tej wartości i ustawić dzień na 21.
W tym przypadku nawiasy są wymagane, ponieważ
kropka ma wyższy priorytet niż gwiazdka.
Jeśli nie umieściłeś tam nawiasów, zostanie to schrzanione, ponieważ najpierw spróbuje zrobić
kropkę, zanim faktycznie dostanie wskaźnik do wskaźnika, aby skierować
go do danych.
Więc zasadniczo próbowałby uzyskać dostęp do danych za pomocą wskaźnika zerowego.
A więc poprzez usuwanie odniesień otrzymujesz wartość.
Teraz, gdy używamy struktur a wskaźniki.
Gdybyśmy chcieli przetestować wartość miesięcy przechowywanych w strukturze daty wskazywanej przez wskaźnik daty,
moglibyśmy zrobić coś takiego.
Odwołujemy się do wskaźnika, umieszczamy w nawiasach, więc ma on pierwszeństwo przed kropką, a następnie
mówimy, że kropka miesiąc równa się 12.
To doskonale poprawna składnia.
Ale to trochę uciążliwe.
Więc c ma swoją własną składnię, więc nie musisz usuwać odniesienia
wszystkiego i umieszczać go w nawiasach dla struktur.
Jeśli chcesz uzyskać dostęp do tego, na co wskazuje struktura, nie
musisz w ten sposób usuwać referencji.
Istnieje specjalny operator, który istnieje w c dla struktur wskaźników i jest
to myślnik większy niż.
To myślnik, po którym następuje znak większości.
Dzięki temu nie musisz usuwać odniesienia do wskaźnika.
Więc zamiast robić gwiazdkę x w nawiasach, a następnie kropkę y,
możesz po prostu powiedzieć x myślnik większy niż y.
Ponieważ x jest wskaźnikiem, nie musisz się do niego odwoływać i chcesz
uzyskać dostęp do elementu wewnątrz tej struktury, cokolwiek wskażesz.
Więc zobaczysz tę składnię w każdym miejscu. Nie zobaczysz
nawiasów ani odniesienia d. Jest całkowicie poprawny, ale wpisujesz więcej znaków.
O wiele bardziej efektywne jest powiedzenie po prostu, że x myślnik jest większy niż y.
Więc poprzednia instrukcja if, zamiast usuwać odniesienia w nawiasach, wystarczy powiedzieć,
czy wskaźnik daty jest dłuższy niż miesiąc.
Jest to nieco intuicyjne, ponieważ kreska jest większa niż w pewnym sensie, że wskazuje na coś.
A więc kreska daty większa niż miesiąc.
Tak więc wskaźnik daty jest wskaźnikiem i dlatego używasz myślnika większego niż.
Gdyby to była struktura zagnieżdżona, wykonałbyś
kreskę większą niż do struktury, a następnie musiałbyś zrobić
kropkę po tym, aby uzyskać dostęp do elementów struktury zagnieżdżonej.
Ale ponieważ wskaźnik dnia jest wskaźnikiem, musisz użyć myślnika równa się lub
myślnika większego niż.
Oto przykład, tworzymy naszą strukturę, mamy trzy
elementy, a następnie tworzymy nasz wskaźnik do daty, a dziś
tworzymy zwykłą zmienną. Przypisujemy naszemu wskaźnikowi
dzisiejszy adres, a następnie, aby przypisać rzeczywiste elementy
struktury, po prostu używamy tego myślnika większego niż i możemy go wydrukować.
Spójrzmy więc na to w blokach kodu, aby zobaczyć, jak to działa.
Więc wstawię tutaj ten przykład.
Zwykle podczas definiowania struktur definiuje się
je poza funkcją, ponieważ wtedy można ich użyć w dowolnej funkcji.
To trochę jak globalne. Ale pamiętaj,
że kiedy definiujesz strukturę, w rzeczywistości nie tworzysz żadnej pamięci.
Więc nadal tworzysz zmienne jako zmienne lokalne lub wskaźniki, ale
rzeczywista definicja znajduje się poza funkcją.
Więc jeśli chcesz go użyć, możesz go użyć w dowolnej funkcji.
Tak więc u góry utworzyliśmy nową strukturę typu data lub
nazwa do tej pory, która zawiera trzy liczby całkowite i kończymy ją średnikiem.
Następnie tworzymy kilka zmiennych wewnątrz pliku main.
Jedna, która jest po prostu zwykłą datą o strukturze zmiennej dzisiaj,
a następnie taka, która jest wskaźnikiem. Wiemy, że jest to wskaźnik, ponieważ przed nim znajduje się gwiazdka.
Wiemy, że wskaźnik podczas tworzenia wskaźnika, który tworzy, przydziela pamięć tylko do przechowywania
tego adresu dla tej wartości tego wskaźnika.
Musielibyśmy więc przypisać mu adres, który robimy dziś za pomocą znaku ampersand,
ponieważ tak naprawdę tworzy się raport pamięci.
Więc teraz wskaźnik daty będzie wskazywał na dzisiejszy
adres z dzisiejszym adresem.
Następnie możemy rozpocząć przypisywanie do niego danych, używając tego myślnika bardziej niż bardzo przydatne i
po prostu przypisać dane, jak wszyscy inni, po prostu użyj operatora przypisania.
A kiedy go wydrukujemy,
zauważysz, że nie musimy usuwać odniesienia, aby go wydrukować.
Aby to
wydrukować, możemy po prostu powiedzieć, że typy danych dla specyfikatorów formatu tutaj są procentowo wyższe
o procent d to samo dla liczb całkowitych, a następnie po prostu używamy sortowania
myślników, ponieważ faktycznie wykonuje usuwanie odniesień do zapamiętania.
Teraz moglibyśmy to zmienić i to byłoby ważne.
Musimy umieścić w nawiasach, a następnie podać miesiąc z kropką.
Tak czy inaczej jest w porządku, ale przyzwyczaj się do myślnika, a potem większego, ponieważ ma lepszą składnię.
A teraz, kiedy to
zbudujemy, zobaczysz, że wypisuje wartości wskaźników daty
i wszystkie są ustawione na 9 25 i 2015.
Więc mówi, że dzisiejsza data to 9 25 15. Został sformatowany do drukowania w ten sposób.
Całkiem proste rzeczy.
Pamiętaj tylko, że myślnik większy niż, to
nowa składnia wskaźników do struktur.
Ale wszystko inne tutaj jest po prostu normalne.
Wiemy, że wskaźniki muszą znajdować się pod adresami sklepów,
więc wiemy, że musimy albo przydzielić pamięć dynamiczną, albo musimy przypisać jej istniejącą strukturę.
Wróćmy i porozmawiajmy więcej o strukturach i wskaźnikach.
Porozmawiajmy teraz o strukturach zawierających wskaźniki.
Wiemy, jak stworzyć wskaźnik do konstrukcji.
Moglibyśmy przydzielić pamięć dla tego wskaźnika, gdybyśmy nie
chcieli przypisać istniejącego adresu istniejącego wskaźnika.
Ale możesz też mieć elementy wewnątrz struktury, która
sama w sobie jest wskaźnikiem. Zatem wskaźnik również może być elementem struktury.
Nie musimy używać tej tablicy znaków.
Moglibyśmy więc powiedzieć struct,
moglibyśmy nazwać go za pomocą wskaźników, a następnie użyć tutaj, w tym przykładzie, mamy dwie
liczby całkowite, dwa wskaźniki całkowite p1 i p2, doskonale poprawną składnię, aby to zrobić.
Tak więc struktura nazywana wskaźnikami jest zdefiniowana jako zawierająca dwa wskaźniki całkowite.
Pierwsza nazywa się p1, a druga p2.
Możesz zdefiniować zmienną typu struct w wskaźnikach, tak jak normal,
struct, int pointers, pointers.
Wskaźniki zmiennych mogą być teraz używane tak samo jak inne struktury.
Wskaźniki nie są wskazówkami.
To wskaźniki int. Zawiera dwa elementy wewnątrz swojego uderzenia,
które są wskaźnikami, ale same wskaźniki nie są rzeczywistym wskaźnikiem.
Więc zwróć na to uwagę. Jest to zmienna strukturalna, której członkami są dwa wskaźniki,
to coś innego.
Więc jeśli chcemy uzyskać dostęp do elementów wewnątrz
zmiennej wskaźników, która jest we wskaźnikach,
nie używamy myślnika większego niż, ponieważ wskaźniki nie są wskaźnikiem, to struktura.
Użylibyśmy kropki, aby uzyskać
dostęp do p1 i dostępu do p2.
W tym przykładzie tworzymy naszą
strukturę, tworzymy zmienną. To nie jest wskaźnik zwany wskaźnikami.
Następnie tworzymy dwie liczby całkowite,
i1 równe 100 i i2, które nie są inicjalizowane.
Teraz p1 i p2 są wskaźnikami.
Muszą więc zawierać prawidłowe adresy pamięci, w których adresy zostały
przydzielone w pamięci.
I to właśnie robi w i1 i i2.
Podczas deklarowania zmiennych całkowitych alokowana jest pamięć dla tych liczb całkowitych.
I tak, przypisując adresy i1 i i2 do p1 i p2, jest to całkowicie w porządku, ponieważ
i1 i i2 mają przydzieloną pamięć, ponieważ są liczbami całkowitymi.
Gdyby wskaźniki liczb całkowitych nie były wskaźnikami całkowitymi, ale były wskaźnikami
znakowymi, należałoby przydzielić pamięć dynamiczną.
Więc teraz używamy tylko liczb całkowitych, więc przypisujemy adresy dwóch liczb całkowitych do p1 i p2.
Możemy teraz powiedzieć wskaźniki gwiazd. p2 równa się 97, minus
97.
Dlaczego musimy tam usuwać odniesienia,
ponieważ wskaźniki. p2 jest tym, do czego się odnosimy.
Wskaźniki. pt p2 jest wskaźnikiem.
Nie mamy dostępu do elementu struktury.
Wyłuskujemy wszystkie wskaźniki. p2.
I zamierzamy przypisać tę wartość tego, na co wskazuje, minus 97.
Więc zauważ różnicę.
Nie tworzymy wskaźnika struktury.
Tworzymy zwykły wskaźnik zmiennej, ale zawiera on
dwa elementy, które są wskaźnikami.
Więc jeśli chcemy przypisać te dwa elementy wewnątrz struktury, musimy usunąć
je za pomocą operatora pośredniego i to
właśnie tam robimy.
A potem w naszych dwóch drukowanych oświadczeniach.
Ponownie, chcemy wydrukować wartości wskazywane przez p1, więc
usuwamy to samo z p2,
a następnie chcemy również
ponownie wydrukować wartości, na które wskazują wskaźniki.
Więc w tym pierwszym mówimy, że i1
równa się procentowi I przecinkom. p1 równa się
procentowi I.
Więc pierwszy znak wewnątrz podwójnych cudzysłowów po prostu wypisuje ten rzeczywisty
tekst, nie jest to usuwanie odniesień do niczego po przecinku, w którym robimy usuwanie odniesień.
Najpierw drukujemy i1, które wynosi 100, a następnie
wypisujemy wskaźniki p1, które będą równe 100.
I2 będzie faktycznie ujemne
97 po przypisaniu go do p2.
A co z tablicami znaków lub wskaźnikami znaków. W poprzednim wykładzie rozmawialiśmy
o tym, jak utworzyć tablicę znaków jako
element wewnątrz wskaźnika. Ale co ze wskaźnikami znaków,
czy powinniśmy zrobić
coś takiego, jak pierwszy i ostatni,
mając tablice znaków, czy też powinniśmy zrobić coś takiego jak pierwszy
i ostatni ze wskaźnikami znaków jako elementami. Jaka jest lepsza opcja.
Cóż, zobaczymy. To znowu jest notacja, ale używanie wskaźników ma swoje zalety.
Więc kiedy tworzymy wskaźniki do znaków wewnątrz naszych elementów,
zwykle jest trochę lepiej.
Ale musisz zrozumieć, co się tutaj dzieje, gdy
tworzysz tablicę znaków elementu tablicy jako element lub wskaźnik jako element, oba
są prawidłowe. Ale jest duża różnica.
Więc jeśli powiemy struct names veep
lub vp i powiemy Talia i Summers, a następnie
powiemy struct pointer name. Więc pamiętaj, nazwy struktur zawierają tablice znaków.
Nazwy wskaźników struktury zawierają wskaźniki.
I tutaj inicjalizujemy wskaźniki równe Bradowi i Fallingjaw.
A potem je drukujemy, wypisujemy pierwszy element, który
jest znakiem a i vp, a
następnie pierwszy element treas, który jest wskaźnikiem do pierwszego.
Zatem struktura nazywa zmienną veep.
To, co się tutaj dzieje, to struny są przechowywane wewnątrz struktury.
Struktura przydzieliła łącznie 40 bajtów do przechowywania dwóch nazw, są
to tablice znaków.
Tak właśnie się dzieje, gdy tworzymy tablice znaków wewnątrz wskaźnika.
Przeznaczamy 40 bajtów na przechowywanie tych dwóch nazw,
20 i 20.
W przypadku wskaźnika nazw zmiennych treas, niezależnie od tego, czy mamy dwa wskaźniki pierwszy i ostatni,
są to ciągi, które są przechowywane wszędzie tam, gdzie kompilator przechowuje stałe łańcuchowe.
Struktura zawiera dwa adresy, ponieważ
są one wskaźnikami. Wskaźniki zawierają wartości, które są adresami.
Więc wszystko, co zrobi, to przydzielenie dwóch wskaźników wewnątrz tej struktury.
To 16 bajtów dla większości systemów, wskaźniki zwykle 8 bajtów lub 4 bajty.
Struktura nazwy struct p nie przydziela miejsca na przechowywanie łańcuchów,
ponieważ alokuje miejsce tylko dla samych wskaźników.
Wskaźniki mają wartości, które są adresami.
Adres, na który wskazuje, nie ma na to przydzielonej pamięci.
Więc kiedy tworzysz te dwa wskaźniki, nie ma przydzielonej pamięci dla tych dwóch wskaźników.
Nie przydziela miejsca.
Dlatego może być używany tylko z łańcuchami, które mają przydzielone miejsce w innym miejscu.
Ilekroć masz wskaźniki wewnątrz struktury, musisz użyć
malloc lub calloc.
W przeciwnym razie mogłyby być przechowywane wszędzie tam, gdzie przechowywane są stałe łańcuchowe.
I to jest duża różnica. Tak więc wskaźniki i struktura nazwy p
powinny być używane tylko do zarządzania ciągami znaków, które zostały utworzone i zaalokowane w innym miejscu w programie.
Nie chcesz przypisywać do
tego danych, chyba że przydzieliłeś je dynamicznie lub zostały przydzielone gdzie
indziej, na przykład przez istniejącą
strukturę lub coś w tym rodzaju. Ale zazwyczaj będziesz chciał pomniejszyć te wskaźniki.
Znowu zupełnie inaczej.
Alokujesz 40 bajtów na te dwie tablice znaków wewnątrz struktury name.
Dla struktury p name masz dwa wskaźniki.
Nie ma na to przydzielonej pamięci podczas tworzenia zmiennej tego typu.
Po prostu tworzy pamięć dla dwóch wskaźników znakowych, z których każdy ma osiem bajtów.
Aby faktycznie przydzielić pamięć na to, na co wskazuje pierwszy i ostatni, musisz zrobić malloc.
Tak więc jednym z przypadków, w których użycie wskaźnika i struktury
jest obsługa
łańcuchów, ma sens, jeśli przydzielasz tę pamięć dynamicznie.
Zwykle dzieje się tak, gdy
go używasz, ponieważ inne dozwolone typy danych automatycznie przydzielają pamięć za Ciebie.
Chcesz więc użyć wskaźnika do przechowywania adresu.
Ma to tę zaletę, że można poprosić malloc, aby przydzielił tylko tyle miejsca,
ile jest potrzebne na ciąg. Rozmawialiśmy o zaletach dynamicznej alokacji pamięci.
Kiedy tworzysz rzeczy statycznie w czasie kompilacji,
tworzysz tylko określoną liczbę bajtów.
Co się stanie, jeśli potrzebujesz więcej bajtów, masz spieprzone, twój program nie będzie działał.
Musisz wrócić i ponownie skompilować. Dzięki dynamicznie przydzielanym ciągom
możesz je ponownie dopasować, możesz utworzyć tyle pamięci, ile potrzebujesz, co czyni
ją znacznie bardziej wydajną w programie.
Więc zamierzasz użyć malloc na dowolnych wskaźnikach utworzonych wewnątrz struktury.
Więc w tym przypadku masz strukturę o nazwie name count.
Masz dwa wskaźniki, wskaźniki znaków, imię i nazwisko.
A potem masz int, litery.
Dwie struny w tym miejscu nie są przechowywane w strukturze.
Tworzymy pamięć tylko dla wskaźników, które zawierają adresy.
Chcemy stworzyć pamięć dla fname i lname dla tego, na co wskazują wskaźniki.
Chcemy więc przechowywać to w porcji zarządzanej przez dynamiczną lokalizację pamięci, która używa malloc.
Adres dwóch ciągów jest tym, co jest przechowywane, a nie tym, na co wskazują.
Zatem adresy są tym, z czym zwykle współpracują funkcje obsługujące ciągi znaków,
co jest dobre i dlatego chcesz tam używać wskaźników, ponieważ
wtedy nie musisz tego robić, możesz po prostu przekazać je o wiele łatwiej.
Oto przykład. Mamy funkcję o nazwie get info.
To wymaga wskaźnika.
I możemy bardzo łatwo przesuwać ten wskaźnik.
Teraz również utworzymy inną lub dla
naszej tablicy wskaźników, do której
jesteśmy przekazywani, przydzielimy dla
niej pamięć.
Więc zobaczysz, że tworzymy znak o nazwie temp, a
następnie przechowujemy pewne dane w tym temp.
Prosimy użytkownika o coś. Nie jesteśmy zaznajomieni z wycinkami, ale jest to to samo, co trochę zapisany skan.
Następnie przydzielamy pamięć dla fname wewnątrz tego wskaźnika i robimy to tak, jak
przydzielamy pamięć dla dowolnego znaku. Nazywamy malloc,
przekazujemy liczbę bajtów.
W tym przypadku długość str wynosi 10 plus 1 dla terminatora zerowego.
A potem pamiętaj, Malloc zamienia gwiazdę pustki, więc rzucamy ją na gwiazdę postaci.
Ale to jest tutaj krytyczne. To wywołanie malloc jest konieczne dla wszystkich struktur, które zawierają wskaźniki.
Teraz przekazaliśmy ten wskaźnik i wskaźnik nigdy nie miał przydzielonej
pamięci.
Więc alokujemy tutaj pamięć. Wtedy możemy bardzo łatwo wykonać naszą kopię.
Możemy skopiować temp do fname naszej struktury pst, która została przekazana
jako parametr.
A potem możemy poprosić ich o wpisanie swojego nazwiska, możemy zwiększyć pamięć na
nazwisko, a następnie zapisać je w zmiennej struct last name.
To jest to, co będziesz musiał zrobić, gdy masz wskaźniki
do postaci wewnątrz swoich struktur, musisz zrobić malloc.
Ponownie, te wskaźniki przechowują tylko adres.
Przydzielają wystarczającą ilość pamięci do przechowywania adresu, a za
mało do przechowywania ciągu znaków.
Więc cokolwiek ten adres wskazuje, musisz przeznaczyć na to pamięć i robisz to
tak jak normalnie z malloc, jedyną
różnicą jest to, że używasz myślnika większego niż znak, aby uzyskać dostęp
do rzeczywistego elementu wewnątrz tej struktury, który jest wskaźnik znaku, dzięki czemu można go
do niego przypisać i to jest usuwanie odniesień.
Więc będziesz chciał się tym bawić. Jest to bardzo
częste w przypadku wskaźników znaków wewnątrz struktur.
Będziemy mieli wyzwanie, w którym będziesz musiał to zrobić. Ale pobaw się tym kodem,
wejdź do bloków kodu, zacznij alokować pamięć na ciągi
lub wskaźniki znaków wewnątrz struktur i zobacz,
jak możesz użyć kopiowania ciągu, aby faktycznie umieścić tam dane, ale
najpierw musisz przydzielić pamięć przed przypisaniem .
Jeśli robisz stałe, jak w poprzednim przykładzie, kto wie, gdzie ta pamięć jest przydzielona.
A więc znowu wiele ważnych pojęć przedstawionych w tym wykładzie.
Pomysł na strukturę, która jest wskaźnikiem w nowej
składni, w
której można użyć myślnika wtedy większego niż w przeciwieństwie
do operatora pośredniego, bardzo ładny.
A następnie posiadanie elementów jako wskaźników i sposób
przydzielania pamięci na wskaźniki znaków. Dziękuję Ci.