Witam !
Przeglądałem pewne programy w C i natrafiłem na takie coś :
#include <stdio.h>
main() {
long long P = 1,
E = 2,
T = 5,
A = 61,
L = 251,
N = 3659,
R = 271173410,
G = 1479296389,
x[] = { G * R * E * E * T , P * L * A * N * E * T };
puts((char*)x);
}
Z tej stronki : https://codegolf.stackexchange.com/questions/22533/weirdest-obfuscated-hello-world
No i nie chciało działać ale nie to mnie zastanawiało co bardziej zastanawiało mnie zmiana typu int na char*.
Jak to dokładnie działa ?
Próbowałem to podobnie zrobić tutaj bo też chciałem zrozumieć różnicę między puts a printf("%s\n") i coś takiego miałem :
int main()
{
// using puts to print hello world
int x = {12,10};
char* str1[] = {"Hello Geeks", "XD"};
for (int i = 0; i < 1; i++)
{
puts((char*)x[i]);
printf("%s\n", (char*)x[i]);
puts(str1[i]);
printf("%s\n", str1[i]);
}
puts("Welcome Geeks");
return 0;
}
Działało połowicznie ...
Bo trochę nie rozumiem co wtedy się dzieje jak zmieniam INT na CHAR*, czy wtedy np 12 staje się adresem na którą wskazuje wskaźnik czy już wartością ?
A no i też trochę mi się zapomniało jak to jest że * str1 rozróżnia który z nich jest wskaźnikiem ? Mam na myśli rząd i kolumnę, tutaj kolumny są przesuwane według wskaźnika a my możemy wybierać konkretny rząd tym "[]", pamiętałem kiedyś ale sporo tego nie używałem i lekko gubię się wskaźnikach i w konwertowaniu zmiennych.
Z góry dziękuję !