Языки программирования для численных методов. Глушакова Т.Н - 69 стр.

UptoLike

69
…………
struct a {
int i;
char c[30];
double d;
};
…………
struct a *s;
if((s = malloc(sizeof(struct a))) == NULL) { /*!*/
printf(Не хватает памяти!\n);
/* обработка ошибки выделения памяти*/
return
}
/* Теперь память под структуру выделена и мы можем обращаться к
ее полям*/
s->i = 10; /* эквивалентно (*s).i = 10 */
strcpy(s->c, динамическая структура” );
s->d = 3.1415;
Здесь в строке, помеченной /*!*/, вызывается функция malloc, чтобы
выделить память по размеру структуры a. Проверка на NULL нужна на
случай , если память окажется исчерпана (хотя на практике такая ситуация
встречается достаточно редко, чаще malloc возвращает NULL в случае ,
когда запрошен отрицательный, нулевой или недопустимо большой
размер).
Тот факт, что выделяемая malloc память содержит «мусор» , не
удобен. Поэтому выделенную память чаще всего сразу как - то
инициализируют. В нашем примере мы явно присвоили определенные
значения полям структуры (функция strcpy копирует строку из второго
параметра в первый).
Инициализировать участок памяти одним и тем же байтовым
значением можно при помощи функции стандартной библиотеки memset.
Например, подходящим значением во многих случаях оказывается нуль.
Обнулить поля нашей структуры мы могли бы так :
memset(s, 0, sizeof(struct a));
                                     69
     …………
     struct a {
            int i;
            char c[30];
            double d;
     };
     …………
     struct a *s;
     if((s = malloc(sizeof(struct a))) == NULL) { /*!*/
            printf(“Не хватает памяти!\n”);
            /* обработка ошибки выделения памяти*/
            return …
     }
     /* Теперь память под структуру выделена и мы можем обращаться к
     ее полям*/
     s->i = 10; /* эквивалентно (*s).i = 10 */
     strcpy(s->c, “динамическая структура”);
     s->d = 3.1415;

      Здесь в строке, помеченной /*!*/, вызывается функция malloc, чтобы
выделить память по размеру структуры a. Проверка на NULL нужна на
случай, если память окажется исчерпана (хотя на практике такая ситуация
встречается достаточно редко, чаще malloc возвращает NULL в случае,
когда запрошен отрицательный, нулевой или недопустимо большой
размер).
      Тот факт, что выделяемая malloc память содержит «мусор», не
удобен. Поэтому выделенную память чаще всего сразу как-то
инициализируют. В нашем примере мы явно присвоили определенные
значения полям структуры (функция strcpy копирует строку из второго
параметра в первый).
     Инициализировать участок памяти одним и тем же байтовым
значением можно при помощи функции стандартной библиотеки memset.
Например, подходящим значением во многих случаях оказывается нуль.
Обнулить поля нашей структуры мы могли бы так:
     memset(s, 0, sizeof(struct a));