У меня есть эта простая программа:
#include <stdio.h>
struct time
{
int hours ;
int minutes ;
int seconds ;
} t[2] = {1,2,3,4,5,6};
int main() {
struct time *tt = t;
printf("%d\n", (*tt));
printf("%d", *(tt+1));
}
Теперь ожидаемый вывод должен быть:
1
4
Но вывод, который я получаю, - это 2 абсолютно одинаковых адреса памяти.Я отправил эту программу другим людям, и у некоторых ожидаемый результат, а у некоторых нет.Я считаю, что это проблема с версией C или GCC.Это разрешимо?Есть ли какое-то объяснение тому, почему это происходит в моей версии C?
Самое странное, что даже после разыменования указателя он все еще печатает некоторый адрес.Как это возможно?
С другой стороны, если я изменю программу следующим образом:
$include <stdio.h>
struct time
{
int hours ;
int minutes ;
int seconds ;
} t[2] = {1,2,3,4,5,6};
int main() {
struct time *tt = t;
printf("%d\n", (*tt).hours);
printf("%d", (*(tt+1)).hours);
}
Она печатает ожидаемый результат.
Какое объяснение этомуповедение?Спасибо.