Mas, Douglas BN,
I) Definiu a regra sem falar da exceção, isso não a torna errada, está apenas incompleta.
II) Traz a segunda parte da regra, sua exceção.
III) Em C++ não existem ponteiros para funções, como no Delphi por exemplo.
Dicas Pertinentes:
1 - Note que as alterativas utilizam a palavra "apenas", se marcar a) fica errado como você falou, pois a informação estaria incompleta, sendo assim, errada. Marcar b) corrige o problema do qual você reclama.
2 - Se existem duas afirmações corretas, marque a "MAIS CERTA", pois marcar a "menos certa" é o mesmo que dizer que a "MAIS CERTA" está errada.
A questão I é FALSA, porque podemos fazer um cast para alterar o tipo de um ponteiro. Confira o exemplo:
int *p;
float c;
p = (int *)&c;
A questão II deveria ser FALSA, porque apesar de um ponteiro void poder receber um endereço para qualquer tipo sem cast, a regra em (I) também pode ser quebrada usando-se um cast, portanto não é a única exceção à regra (I).
A questão III, também é FALSA. Ponteiros para funções podem ser usados em C++ (e em C) também. Confira o seguinte exemplo:
#include <iostream>
int myfunc(int i) { return i + 1; }
int main(int argc, char const *argv[]) {
int (*p)(int);
p = &myfunc;
int k = p(2);
std::cout << k << std::endl;
return 0;
}
Apenas não é muito comum, porque o suporte à classes e métodos em C++ torna desnecessário o uso. Mas, por razões de compatibilidade com C, a funcionalidade foi incluída em C++.
A questão deveria ser anulada.