Задать вопрос
@Del0v
Студент

Что значит звёздочка после типа указателя?

*pointer - разыменование указателя,
а что значить Звёздочка после типа?
int*
Например:

double* ptd;
ptd = (double *)malloc(10 * sizeof(double));


Зачем перед malloc стоит (double*), если это пишется в sizeof(double), Для чего после double стоит *, ведь это символ разыменования, а что мы разыменуем?
  • Вопрос задан
  • 9065 просмотров
Подписаться 3 Простой 1 комментарий
Решения вопроса 2
myjcom
@myjcom
что значить Звёздочка после типа?

https://en.cppreference.com/w/c/language/pointer

Для чего после double стоит *, ведь это символ разыменования, а что мы разыменуем?

В данном случае звездочка не является оператором а относится к типу.

Зачем перед malloc стоит (double*)

https://en.cppreference.com/w/c/memory/malloc

Выделяет память в байтах (возвращает указатель на void), и ничего не знает о том как вы ими будете распоряжаться.

N.B. В современном Си такой необходимости нет.


приведение к типу (double*) сообщает компилятору, что вы хотите.
Ответ написан
CityCat4
@CityCat4 Куратор тега C
//COPY01 EXEC PGM=IEBGENER
Первая запись обьявляет переменную ptd указателем на double. Компилятор ожидает, что в данной переменной хранится адрес памяти ячейки, который указывает на переменную типа double, хотя сразу после обьявления в ней находится мусор - неопределенное значение.
Вторая запись выделяет память под хранение переменных.
sizeof(double) - получить размер переменной double для текущей платформы
malloc - выделить память под десять переменных размером в double - обычная вещь для массива например.
(double *) - привести тип возвращаемого значения (malloc всегда возвращает void) к типу "указатель на double"

Надо сказать, что данный код можно использовать только в том случае, если сразу за malloc() идет чтение или инициализация массива. Потому что malloc() вернул область памяти, заполненную случайными данными. Для гарантии, что там не будет мусора лучше использовать calloc:
ptd = (double *) calloc(sizeof(double), 10);
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы