Głowię się nad pewnym zadaniem.
Kod:
#include <iostream>
using namespace std;
int main() {
// Tablica z datą {ROK, MIESIAC, DZIEN}
int date[3];
date[0] = 2011; // Rok
date[1] = 10; // Miesiac
date[2] = 29; // Dzien
// Wyświetlamy datę
cout << date[0] << "/" << date[1] << "/" << date[2] << endl;
// Wskaźnik bez definiowania typu (?)
void * ptr = &date;
long double *tmp = static_cast<long double*>(ptr);
*tmp = (10000*2011)+(10000*11)+10; // coś źle myśle :)
// Wyświetlamy datę
cout << date[0] << "/" << date[1] << "/" << date[2] << endl;
return 0;
}
Wynik:
2011/10/29
0/-1706806016/16407
Oczekiwany wynik:
2011/10/29
2011/11/10
Chodzi o pewien trick. Mamy 3 elementową tablicę typu int. Każdy element przechowuje datę, odpowiednio rok, miesiąc, dzień.
Typ int ma 4 bajty, więc cała tablica zapisana jest na 12 bajtach. Zadanie polega na zapisaniu daty za pomocą jednej definicji przypisania, zamiast trzech. Trzeba tutaj skorzystać z pewnej własności, że typ long double ma wielkość 12 bajtów. Pomyślałem, że można użyć do tego wskaźnik bez definiowania typu lub ewentualnie zrobić static_cast <long double="double">. Problem w tym, że nie wiem jak się za to zabrać i jak zapisać liczbę (rok miesiac dzien) tak by wskoczyła do odpowiednich komórek pamięci w tablicy.