-
X-Received: by 2002:ac8:5782:0:b0:343:66da:9607 with SMTP id
v2-20020ac85782000000b0034366da9607mr2715484qta.403.1661588881438; Sat,
27 Aug 2022 01:28:01 -0700 (PDT)
X-Received: by 2002:ac8:5782:0:b0:343:66da:9607 with SMTP id
v2-20020ac85782000000b0034366da9607mr2715484qta.403.1661588881438; Sat,
27 Aug 2022 01:28:01 -0700 (PDT)
Path: news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!3.eu.feeder.erj
e.net!feeder.erje.net!usenet.blueworldhosting.com!feed1.usenet.blueworldhosting
.com!peer01.iad!feed-me.highwinds-media.com!news.highwinds-media.com!news-out.g
oogle.com!nntp.google.com!postnews.google.com!google-groups.googlegroups.com!no
t-for-mail
Newsgroups: pl.misc.elektronika
Date: Sat, 27 Aug 2022 01:28:01 -0700 (PDT)
In-Reply-To: <6309b565$0$6193$65785112@news.neostrada.pl>
Injection-Info: google-groups.googlegroups.com; posting-host=5.172.255.35;
posting-account=fcN60AoAAACGnErMsW3A8rTO2UKkGJEn
NNTP-Posting-Host: 5.172.255.35
References: <6308cdf1$0$6193$65785112@news.neostrada.pl>
<4...@g...com>
<63091035$0$560$65785112@news.neostrada.pl>
<1...@g...com>
<6309b565$0$6193$65785112@news.neostrada.pl>
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <0...@g...com>
Subject: Re: C - łańcuchy tekstowe definiowane w parametrach funkcji
From: Dawid Rutkowski <d...@w...pl>
Injection-Date: Sat, 27 Aug 2022 08:28:02 +0000
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Received-Bytes: 5701
Xref: news-archive.icm.edu.pl pl.misc.elektronika:773961
[ ukryj nagłówki ]sobota, 27 sierpnia 2022 o 08:11:18 UTC+2 Atlantis napisał(a):
> On 26.08.2022 22:19, Dawid Rutkowski wrote:
>
> > Ale wymyśliłeś... Ogólnie należy przypomnieć sobie C - i niezależnie,
> > co zrobi kompilator, taka zmienna będąca argumentem funkcji ma
> > gwarantowany czas życia tylko do wyjścia z tego konkretnego wywołania
> > tej funkcji (a jeszcze może chciałbyś "reentrant"?). Tak jest w C i
> > tyle.
> Jeśli już proponujesz przypomnienie sobie C, to należałoby sobie
> przypomnieć czym jest const char* (albo char*) w tym języku. Tutaj nie
> mamy do czynienia z czymś takim jak String C++ albo innych językach
> wysokiego poziomu. To nie jest obiekt albo kontener na dane, podczas
> tworzenia którego zachodziłaby alokacja pamięci.
> To jest po prostu zwykły wskaźnik, który przechowuje jedną, jedyną
> informację - adres początku łańcucha znaków w pamięci.
>
> Żeby pokazać różnicę, wyobraźmy sobie następną sytuację w C:
>
>
> const char* globalny_wskaznik = NULL;
>
> void foo(const char* str) {
> globalny_wskaznik=str;
> }
>
> Z następującą sytuacją w C++:
>
> std::String globalny_string;
>
> void bar(std::String str) {
> globalny_string = str;
> }
>
>
> Co się stanie po wywołaniu pierwszej funkcji? Otrzyma ona wskaźnik z
> adresem na jakiś obszar w pamięci. Adres ten zostanie przekopiowany do
> globalnego wskaźnika, a sam str zostanie zdjęty ze stosu. To co się
> będzie działo z samymi danymi na które wskazywał nie jest w żaden sposób
> określone - wszystko zależy od tego o jakim typie pamięci mówimy. Mogą
> rezydować wiecznie we flashu, mogą być cały czas dostępne jako zmienna
> globalna w RAM-ie, ale mogą też zniknąć w wyniku zdjęcia ze stosu albo
> dealokacji ze sterty w innej części programu.
>
> Co się natomiast dzieje w drugim przykłaadzie? Wywołanie funkcji
> powoduje utworzenie obiektu klasy std::String, który zostaje
> zainicjowany konkretnym tekstem i utworzy swoją instancję w pamięci. W
> skutek użycia operacji przypisania zostanie wywołany konstruktor
> kopiujący, który utworzy osobną kopię zawartości str w obiekcie
> globalny_string. Po wyjściu z funkcji bar zostanie wywołany destruktor
> obiektu str, jednak jego globalna kopia będzie nadal istniała.
Tutaj już czas na przypomnienie sobie "Alicji w krainie czarów" - rozdziału z
piosenką bodajże Białego Rycerza (czyli skoczka):
"Nazwa tej piosenki nazywa się >>rybie oczy<<" itd.
Czyli różnica między nazwą wskaźnika, zawartością wskaźnika, nazwą tablicy i
zawartością tablicy.
Przy wywołaniu send("tekscik"), gdy send(const char *aArg),
"tworzony" jest zarówno wskaźnik aArg jak i anonimowa tablica z zawartością
"tekscik".
I obie te zmienne mają czas życia do zakończenia wywołania tej funkcji.
Jakaś sekta twierdzii, że "dynamicznie" można tworzyć tylko obiekty?
Różnica jest tylko taka, że przy tworzeniu obiektu wywoływany jest konstruktor (w C++
cholera wie, który).
A co do send(const char *aArg)
to nigdy nie potrafiłem zapamiętać, czy zabronione jest zmienianie
wartośvi aArg czy też wartości wskazywanej...
Czyli czy nie wolno:
aArg=b;
czy
aArg[3]=c;
Bo była chyba jeszcze konstrukcja, która nie pozwalała na to inne podstawienie.
Ogólnie to są bzdury do męczenia studentów.
C K&R rulez na wieki ;>
Następne wpisy z tego wątku
- 27.08.22 11:34 Marek
- 27.08.22 11:53 JDX
- 27.08.22 12:59 Atlantis
- 27.08.22 15:59 Dawid Rutkowski
- 27.08.22 16:06 Dawid Rutkowski
- 27.08.22 16:53 J.F
- 27.08.22 20:30 a...@m...uni.wroc.pl
- 27.08.22 20:55 JDX
- 27.08.22 21:43 Dawid Rutkowski
- 28.08.22 12:34 JDX
- 28.08.22 14:27 Dawid Rutkowski
- 28.08.22 14:30 Atlantis
- 29.08.22 07:29 JDX
- 29.08.22 10:25 Krzysztof Gajdemski
Najnowsze wątki z tej grupy
- Cyna dylemat
- Mierniki poziomu glukozy (CGM, FGM)
- A Szwajcarzy kombinują tak: FinalSpark grows human neurons from stem cells and connects them to electrode arrays
- Kontrola nad prądem - sprawdź jak działa [apka - przyp. JMJ] eLicznik
- NETIA i hasło logowania
- Modulacja FM
- Najgorszy język programowania
- Kol. sukces po polsku: firma Szumisie sp. z o.o.
- Chińska Telefonia 6G - Chcą Nas Sterować Elektrycznie - Jak Kukiełki w Teatrze Lalek!!!
- RS-485 ale automatycznie dwukierunkowy
- Leżakujące SSD gubią po roku dane
- kolorowy e-paper
- Sterownik kotła CO praca PWM
- Jakie baterie A23 i LR44?
- OLED SSD1306 - degradacja?
Najnowsze wątki
- 2025-12-14 Dla UTRWALENIA: jak działają "EKO" ZBRODNIARZE
- 2025-12-13 Emisyjność BEV
- 2025-12-13 Dla odprężenia - niezły zawodnik
- 2025-12-12 Cyna dylemat
- 2025-12-12 Warszawa => Przedstawiciel handlowy / KAM (branża TSL) <=
- 2025-12-12 Warszawa => Architekt rozwiązań (Workday) - Legal Systems <=
- 2025-12-12 Warszawa => Dynamics 365 Commerce/POS Developer <=
- 2025-12-12 Wrocław => React Developer with knowledge of C++ <=
- 2025-12-12 Białystok => Programista React ze znajomością C++ <=
- 2025-12-12 Warszawa => Microsoft Dynamics 365 Finance Consultant <=
- 2025-12-11 To już efekt Żurka czy coś jeszcze GORSZEGO?
- 2025-12-11 Policjanci w mieście Łodzi zmierzą ci prędkość z błędem mniejszym niż producent w laboratorium :-)
- 2025-12-11 Warszawa => Senior Java Developer <=
- 2025-12-11 Kolejny prezent
- 2025-12-10 hameryka




2035 rok coraz mniej realny? Europa traci tempo w wyścigu o elektromobilność