Dwie wartosci w jednej komórce - dowód

0

Skompilować i ocenić - kto mądrzejszy to może wytłumaczy wyniki.

#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
    const float pi = 3.14;
    float *ptr = const_cast<float *>(&pi);
    *ptr = 24.23;   
    cout << pi << "\t" << &pi << endl;
    cout << *ptr << "\t" << ptr << endl;
    
    system("PAUSE");
    return EXIT_SUCCESS;
}
0

Const jest wyrażeniem stałym, kompilator najczęściej wykonuje redukcję i podstawia wartość w miejsce użycia, fizyczna stała w pamięci jest generowana jedynie na potrzeby pobrania jej adresu. Tak poza tym, kompilator ma pełne prawo fizycznie umieścić stałą w pamięci tylko do odczytu. Dla przykładu zaś CL z Visual Studio zaś cały czas używa fizycznego floata:

24.23   0012FF78
24.23   0012FF78

Dowód to jest, ale nieznajomości języka.

0

Nie jeden z programistów nie wiedział by na 100 % co zostanie wypisane. - A to przykład dawny z Interview.
Pozdrawiam

0

Bo tutaj mogą zajść 4 opcje:

  • 2x pi,
  • 2x 24.23,
  • 3.14 i 24.23,
  • wysypie się przy próbie modyfikacji.
    Tego nie da się 'wiedzieć', zachowanie niezdefiniowane, zależne od kompilatora, linkera, ustawień.

Jak ktoś się mieni programistą C++ i nie wie co const oznacza to może co najwyżej kawę parzyć.

Za temat wątku najchętniej dałbym to do perełek - 'dwie wartosci w jednej komórce', chyba nie masz komputera kwantowego, prawda? Już nie tylko nieznajomość C++ ale i ogólnych podstaw informatyki.

0

chyba nie masz komputera kwantowego, prawda?

mam czy nie mam to nie jest twój biznes. A gdy pisze i nie wiem o co chodzi to stawiam trzy kropek!
Chciałam aby ktoś napisał logiczne proste wyjaśnienie a nie zaczął się wymądrzać.

0
agnieszka_offline napisał(a)

mam czy nie mam to nie jest twój biznes.

To mój biznes, w komputerach klasycznych komórka pamięci może znajdować się tylko w jednym ustalonym stanie, w kwantowym (w uproszczeniu) w wielu jednocześnie.

Sam(a) prowokujesz pisząc o dowodzie na dwie wartości jednocześnie i pytaniu z rozmowy...

0
agnieszka_offline napisał(a)

Skompilować i ocenić - kto mądrzejszy to może wytłumaczy wyniki.

takie sformułowanie wskazuje na pewność siebie i/lub brak szacunku dla ewentualnych odpowiadających, nie dziw się więc, że ton odpowiedzi był taki a nie inny

agnieszka_offline napisał(a)

mam czy nie mam to nie jest twój biznes. A gdy pisze i nie wiem o co chodzi to stawiam trzy kropek!
Chciałam aby ktoś napisał logiczne proste wyjaśnienie a nie zaczął się wymądrzać.

1' nie trzy kropek, tylko trójkropek.. i słuzy on btw. do czegoś innego. ewentualnie mozesz dolepic do niego znak zapytania i wtedy niewiedziecocochodziitostawiac
2' temat Twojego wątku nie dość że jest nieodpowiedni, to jeszcze nawet nie raczylas w pierwszym watku opisac co niby mialo by byc dziwnego w wyniku tego kodu. rownie dobrze moglabys dostac od kogos odpowiedz "wszystko jest w porzadku i dziala poprawnie" i ow mialby rację. z t(T)woim obecnym podejsciem, mozesz sie cieszyc, że '...' faktycznie cokolwiek Ci wytlumaczyl
3' jesli to nie mialo byc pytanie, a raczej ciekawostka dla innych, niepotrzebnie dolaczalas wydruk wartosci adresow - o ile 'efekt' by sie pojawil w ogole, to samo z siebie byloby juz odpowiedzia na 'zagadke'
4' zamiast sie pultac i zadzierac nosa, poswiec nastepnym razem te energie na analize i opisanie problemu

1 użytkowników online, w tym zalogowanych: 0, gości: 1