Co wypisuje ten program?

Co wypisuje ten program?
FA
  • Rejestracja:ponad 9 lat
  • Ostatnio:prawie 9 lat
  • Postów:18
0

Taki kod

Kopiuj
#include <iostream>

int main()
{
	char *cptr = "abc...";
	std::cout<<cptr<<' '<<&cptr<<' '<<(int*)cptr;
}

Najpierw jest wypisywany tekst. A potem adres wskaźnika czy adres tego na co wskazuje wskaźnik?

nalik
  • Rejestracja:około 9 lat
  • Ostatnio:14 dni
  • Postów:1039
1

Najpierw adres zmiennej typu wskażnik na stosie a potem adres gdzie zaczyna się łańcuch znakowy.

Zrob takei cos

Kopiuj
#include <iostream>
 
int main()
{
    char *cptr = "abc...";
    char *cptr2 = "abc...";
    std::cout<<cptr<<' '<<&cptr<<' '<<(int*)cptr << std::endl;
    std::cout<<cptr2<<' '<<&cptr2<<' '<<(int*)cptr2 << std::endl;
}

U mnie daje to:

Kopiuj
abc... 0x7ffc9a82f3a0 0x400ac4
abc... 0x7ffc9a82f3a8 0x400ac4
edytowany 1x, ostatnio: nalik
FA
Dzięki za wytłumaczenie :)
kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:3 dni
  • Lokalizacja:Szczecin
3

Ten kod nie jest poprawnym kodem C++ i się nie kompiluje (ew. nie powinien się kompilować w żadnym kompilatorze zgodnym ze standardem). Literał znakowy możesz użyć do inicjalizacji tablicy znaków lub wskaźnika na const char.


edytowany 1x, ostatnio: kq
nalik
  • Rejestracja:około 9 lat
  • Ostatnio:14 dni
  • Postów:1039
1

Kompiluje się (g++ 4.8.4, clang++ 3.4). Ale są warningi. owszem nie jest poprawny ;)

ptr.cpp: In function ‘int main()’:
ptr.cpp:6:18: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
char cptr = "abc...";
^
ptr.cpp:7:19: warning: deprecated conversion from string constant to ‘char
’ [-Wwrite-strings]
char *cptr2 = "abc..."

Jakby kompilator aż tak się trzymał standardu to 80% codebasu aktualnie by się nie kompilowała.

edytowany 2x, ostatnio: nalik
kq
Deprecated to było w C++98. Od C++11 jest to kompletnie nielegalna konwersja, więc kompliatory przepuszczające ją (wszystkie popularne, jeśli ignorować warningi) są w błędzie.
nalik
Świadome zignorowanie. Możesz zgłosić jak tak przeszkadza np tu https://llvm.org/bugs/buglist.cgi?product=clang&amp;component=C%2B%2B11&amp;resolution=--- (długa lista bugów, auć)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.