eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikaC - łańcuchy tekstowe definiowane w parametrach funkcjiRe: C - łańcuchy tekstowe definiowane w parametrach funkcji
  • Data: 2022-08-27 10:28:01
    Temat: Re: C - łańcuchy tekstowe definiowane w parametrach funkcji
    Od: Dawid Rutkowski <d...@w...pl> szukaj wiadomości tego autora
    [ pokaż wszystkie 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 ;>

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: