"Почему оператор (*
) необходим для доступа к значению переменной int*
, а не для char*
?"
Поскольку в функции printf()
спецификатор формата %s
ожидает соответствующий аргумент типа char *
- указатель на строку, в то время как %d
ожидает аргумент типа int
.
В последнем случае оператор разыменования *
требуется для разыменования int_ptr
и для получения значения int
объекта int_ptr
указывает на
As char_ptr
уже относится к типу char*
в соответствии с требованиями %s
, нет необходимости разыменовывать его.
Примечания:
1.
int_ptr = (int *) malloc(12);
Обратите внимание, что с 12
байтами в большинстве современных систем вы сможете выделить только 1 int
объект, так как для этого требуется 8
байт. Оставшихся 4
байтов недостаточно для хранения другого.
Если вы хотите выделить место только для одного int
, используйте sizeof(*int_ptr)
:
int_ptr = (*int) malloc(sizeof(*int_ptr));
2.
Также не забудьте free()
хранилище, выделенное malloc()
после его использования:
free(int_ptr);
free(char_ptr);
3.
Кроме того, нет необходимости разыгрывать возврат значение malloc()
: ли я приведу результат mallo c?
char_ptr = malloc(mem_size);
int_ptr = malloc(sizeof(*int_ptr));