Вы уверены, что делаете то, что действительно хотите делать? В первом примере со строкой вы передаете указатель на строковый литерал в insertNode, а во втором примере ((void *)num
) вы приводите значение int к указателю на void. Вы действительно хотели сделать это: insertNode(list,(void *)&num);
, т.е. передать ссылку на данные, как вы делали в первом примере?
Кроме того, char *str="test";
указывает на строковый литерал str, который доступен только для чтения. Так что вы действительно должны делать const char *str="test";
. Если вам нужна нормальная (доступная для записи) строка, тогда char str[] = "test";
.
Извините, если вы уже знали эти вещи и действительно хотели сохранить int в void *
, я просто не могу представить, почему вы это сделали.
Редактировать: Если вы действительно хотите общее хранилище, тогда объединение будет безопасным подходом. Нет абсолютно никакой гарантии, что int будет соответствовать void *
в стандартном C, хотя в большинстве реализаций он, вероятно, подходит.