Форум программистов, компьютерный форум CyberForum.ru

Каково назначение функции malloc - C++

Восстановить пароль Регистрация
 
Starstuck
 Аватар для Starstuck
4 / 4 / 0
Регистрация: 01.02.2012
Сообщений: 124
01.11.2012, 14:13     Каково назначение функции malloc #1
Вот решенная задача:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
 
struct athlet
{
    long m;
    long pow;
    athlet()
    {
        m=0;
        pow=0;
    }
};
 
int compare (const void * a, const void * b)
{
    athlet aa=*(athlet*)a;
    athlet bb=*(athlet*)b;
    return (aa.m==bb.m ? aa.pow-bb.pow : aa.m-bb.m);
}
 
int main()
{
 
    long n;
    scanf("%i", &n);
    athlet *mass; // Введем указатель *mass типа athlet
    mass=(athlet*)malloc(n*sizeof(athlet)); // создадим динамически массив
    for(long i=0;i<n;i++)
        scanf("%i %i", &mass[i].m, &mass[i].pow);
    qsort(mass, n, sizeof(athlet), compare);
    
    long res=1;
    long now=(*mass).m;
    for(long i=1;i<n;i++)
        if(mass[i].pow>=now)
        {
            res++;
            now+=i[mass].m;
        }
 
    printf("%i", res);
        system ("pause");
}
Не понимаю данную строку mass=(athlet*)malloc(n*sizeof(athlet));
Т.е. мы создаем динамически массив и указатель на него будет mass? А что такое (athlet*)?
Подскажите пожалуйста
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tiva
94 / 94 / 1
Регистрация: 25.04.2012
Сообщений: 429
01.11.2012, 14:15     Каково назначение функции malloc #2
приведение к типу, а именно к твоей структуре атлет
ksandro
31 / 31 / 1
Регистрация: 15.04.2011
Сообщений: 81
01.11.2012, 14:15     Каково назначение функции malloc #3
функция malloc возвращает указатель типа void*
(athlet*) - операция преобразования к типу athlet*
OhMyGodSoLong
01.11.2012, 14:17
  #4

Не по теме:

В Си, btw, это преобразование автоматическое.

Starstuck
 Аватар для Starstuck
4 / 4 / 0
Регистрация: 01.02.2012
Сообщений: 124
01.11.2012, 14:18  [ТС]     Каково назначение функции malloc #5
Tiva,
ksandro,
~OhMyGodSoLong~,

Спасибо, понял.

А что означает эта строка?
18. athlet aa=*(athlet*)a;
serejkus
46 / 44 / 4
Регистрация: 31.10.2011
Сообщений: 98
01.11.2012, 14:18     Каково назначение функции malloc #6
В данном случае malloc выделяет память, равную n * (размер структуры athlet), т.е. для n элементов athlet. Почитать подробнее про malloc можно в одкументации (или man 3 malloc).
(athlet*) - это приведение к типу "указатель на athlet". В C/C++ массивы и указатели тесно связаны - массив является указателем на первый элемент.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11835 / 6814 / 769
Регистрация: 27.09.2012
Сообщений: 16,891
Записей в блоге: 2
Завершенные тесты: 1
01.11.2012, 14:19     Каково назначение функции malloc #7
Цитата Сообщение от Starstuck Посмотреть сообщение
18. athlet aa=*(athlet*)a;
Привидение указателя и его разыменование.
Starstuck
 Аватар для Starstuck
4 / 4 / 0
Регистрация: 01.02.2012
Сообщений: 124
01.11.2012, 14:26  [ТС]     Каково назначение функции malloc #8
Croessmah, что означает приведение указателя?
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
01.11.2012, 14:30     Каково назначение функции malloc #9
C
1
2
3
4
5
6
7
8
9
10
11
12
13
/* функция принимает указатели на тип void* = сырые указатели на "какой-то кусок памяти" */
int compare (const void * a, const void * b)
{
    /* (athlet*)a = преобразуем "указатель на какой-то кусок памяти"
         в "указатель на кусок памяти, где лежит struct athlet"
 
       athlet aa=*(athlet*)a = копируем в aa тот struct athlet,
         который лежит в куске памяти, на который указывает a
    */
    athlet aa=*(athlet*)a;
    athlet bb=*(athlet*)b;
    return (aa.m==bb.m ? aa.pow-bb.pow : aa.m-bb.m);
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.11.2012, 14:32     Каково назначение функции malloc
Еще ссылки по теме:

с++: какие есть специальные символы и каково их назначение? C++
функции на основе realloc, malloc C++
C++ Назначение аргументов функции int main

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11835 / 6814 / 769
Регистрация: 27.09.2012
Сообщений: 16,891
Записей в блоге: 2
Завершенные тесты: 1
01.11.2012, 14:32     Каково назначение функции malloc #10
Цитата Сообщение от Starstuck Посмотреть сообщение
что означает приведение указателя?
Преобразование к типу athlet*
то же самое, что и с malloc:
Цитата Сообщение от ksandro Посмотреть сообщение
функция malloc возвращает указатель типа void*
(athlet*) - операция преобразования к типу athlet*
Yandex
Объявления
01.11.2012, 14:32     Каково назначение функции malloc
Ответ Создать тему
Опции темы

Текущее время: 18:06. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru