-
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
- Taśma LED
- Jak odróżnić myjki wibrujące od ultradźwiękowych.
- Ledy na wyłączniku czasowym błyskają
- Re: Kompensacja mocy biernej przy 230VAC
- Re: Kompensacja mocy biernej przy 230VAC
- RCD wybija
- Re: Kompensacja mocy biernej przy 230VAC
- Łożysko ślizgowe - jaki olej
- Re: Kompensacja mocy biernej przy 230VAC
- Re: Kompensacja mocy biernej przy 230VAC
- Współczesny falomierz
- Zasilacz 7V na szynę DIN
- Waga z legalizacją
- Wietnam wykłada 500M$ i chce zbudować fabrykę za 50G$
- Pendrive zdycha, czy coś jeszcze innego? Problem z plikami.
Najnowsze wątki
- 2025-04-05 Dziwny wymiar wyroku
- 2025-04-05 Prunt z dachu
- 2025-04-05 Taśma LED
- 2025-04-05 Kraków => MS Dynamics 365BC/NAV Developer <=
- 2025-04-05 Warszawa => Strategic Account Manager <=
- 2025-04-05 co w Anglii dziś w Polsce za 30 lat
- 2025-04-05 Wrocław => SOC Tech Lead <=
- 2025-04-05 Gdynia => Przedstawiciel handlowy / KAM (branża TSL) <=
- 2025-04-05 Wyrok dożywocia dla Polki
- 2025-04-04 Prezydium Sejmu Tuskiego orzekło: Poseł KO mecenas Roman Giertych NIE jest mordercą (w żadnym sensie tego słowa?)
- 2025-04-04 Reset komóry
- 2025-04-04 Lublin => JavaScript / Node / Fullstack Developer <=
- 2025-04-04 Zielonka => Key Account Manager IT <=
- 2025-04-04 Warszawa => Ekspert IT (obszar systemów sieciowych) <=
- 2025-04-04 Warszawa => Mid/Senior IT Recruiter <=