• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

zmiana wartości const

Object Storage Arubacloud
+1 głos
900 wizyt
pytanie zadane 30 maja 2016 w C i C++ przez Pan Kulomb Pasjonat (18,630 p.)

Witam, czy jest ktoś w stanie wytłumaczyć różnicę między p, a *ptr?

 

#include <bits/stdc++.h>
 
int main() {
  const int p = 69;
  int *ptr = (int*) &p;
  *ptr = 123;
  printf("%d %d\n", p, *ptr);
}

OUT

69 123

3 odpowiedzi

+6 głosów
odpowiedź 30 maja 2016 przez Radfler VIP (101,030 p.)
edycja 30 maja 2016 przez Radfler

Ten program to jedno wielkie undefined behaviour. W linijce piątej używasz rzutowania jawnego (tutaj: const_cast) do usunięcia kwalifikatora const, no i w tym nic złego nie ma. Jednak modyfikacja stałego obiektu (nawet jak odnosimy się do niego przez niestały wskaźnik/referencję) to niezidentyfikowane zachowanie. No i do takiej sytuacji doprowadza wyrażenie w linijce 6.

Jeszcze cytat ze standardu (5.2.11.6):

Depending on the type of the object, a write operation through the pointer, lvalue or pointer to data member resulting from a const_cast that casts away a const-qualifier may produce undefined behavior

Pozdrawiam!

+1 głos
odpowiedź 31 maja 2016 przez maly Nałogowiec (37,190 p.)

Nie na temat ale...

#include <bits/stdc++.h>

To ładuje wszystkie nagłówki biblioteki c++, robiąc tak nie będziesz wiedział co w rzeczywistości jest wymagane no i nie zadziała w innych kompilatorach niż gcc.
Rozumiem że na szybko do testów można, ale nie powinno się tak robić.

–4 głosów
odpowiedź 30 maja 2016 przez niezalogowany
*ptr to zmienna, a p to stała
komentarz 30 maja 2016 przez niezalogowany
Dlaczego taka zła ocena?
2
komentarz 31 maja 2016 przez adrian17 Ekspert (344,860 p.)
Bo to zdanie w zasadzie niczego nie wyjaśnia ani nie wnosi do tematu - a wnioski jakie można z niego wyciągnąć są potencjalnie błędne.

Podobne pytania

0 głosów
2 odpowiedzi 183 wizyt
0 głosów
1 odpowiedź 582 wizyt
pytanie zadane 19 grudnia 2018 w C i C++ przez kamyk2 Początkujący (420 p.)
+2 głosów
3 odpowiedzi 1,229 wizyt
pytanie zadane 15 lipca 2017 w C i C++ przez Bondrusiek Maniak (61,370 p.)

92,550 zapytań

141,394 odpowiedzi

319,522 komentarzy

61,935 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...