Одна указывает на черную дыру.
Другие указывают на вещь, указывающую на черную дыру.
Они на самом деле не одно и то же, но указатели могут бытьпреобразуется в void *
.Вы можете конвертировать int *
в void *
, потому что это указатель.void **
является все еще указателем (он просто указывает на указатель), и, поскольку он является указателем, вы можете преобразовать его в void *
.Это имеет какой-то смысл?
Тем не менее, я не думаю, что я когда-либо использовал void **
, но если вам нужен массив void *
s, тогда тип будет void **
.(В C) void *
часто используется для хранения указателя на некоторые пользовательские данные - но вы не будете знать заранее, какого типа будут эти данные.Если у вас есть их массив, то void **
.
Поскольку вы также пометили это как C ++: предыдущий случай на самом деле не применим: вы можете использовать std::vector<void *>
.Действительно, void *
может быть сомнительным - абстрактная база может лучше соответствовать вашим целям.void *
полезен в основном на C.