Операции над указателями на структуры
Эти операции не отличаются от операций над другими указателями на данные. Исключение составляет операция «стрелка» (->). Если присвоить указателю на структуру конкретного структурного типа значение адреса одного из элементов массива структур того же типа, то, изменяя значение указателя (например, с помощью операций ++ или --), можно равномерно «перемещаться» по массиву структур.
Пример 2. Вычислить сумму заданного количества комплексных чисел, представленных в программе массивом структур.
#include <stdio.h>
void main (){
struct complex {//Опредение структуры
float x;
float y;
}array[]={1.0,2.0,3.0,-4.0,-5.0,-6.0,-7.0,-8.0};
struct complex summa = {0.0, 0.0};
struct complex *point = &array[0];
int k, i;
k=sizeof(array)/sizeof(array[0]);
for (i=0; i<k; i++){
summa.x+=point->x;
summa.y+=point->y; }
printf("\n Сумма: real=%f, \t imag=%f", summa.x, summa.y);
}
Пример 3. Программа считывает время с компьютера и переводит его во время по Гринвичу.
#include <stdio.h>
#include <time.h>
void main() {
struct tm {
int tm_sec; //Секунды
int tm_min; //Минуты
int tm_hour; //Часы (0-23)
int tm_mday; //День месяца (1-31)
int tm_mon; //Месяц (0-11)
int tm_year; //Год (календарный год минус 1900)
int tm_wday; //День недели (0-6; Воскресенье = 0)
int tm_yday; //День года (0-365)
int tm_isdst; //0, если переход на летнее время не используется
};
time_t t;
struct tm *gmt, *area;
t = time(NULL);
//Преобразует дату и время в структуру
area = localtime(&t);
printf("Секунды: %d\n", area->tm_sec);
printf("Минуты: %d\n", area->tm_min);
printf("Часы: %d\n", area->tm_hour);
printf("День: %d\n", area->tm_mday);
printf("Месяц: %d\n", area->tm_mon);
printf("Год: %d\n", area->tm_year);
printf("День недели: %d\n", area->tm_wday);
printf("День года: %d\n", area->tm_yday);
printf("Местное время: %s", asctime(area));
//Преобразуем структуру в строку
gmt = gmtime(&t);
//Преобразует дату и время во время по Гривинчу
printf("Время по Гринвичу: %s", asctime(gmt));
}
Дата добавления: 2015-02-16; просмотров: 613;