SóProvas


ID
104983
Banca
FCC
Órgão
TRE-AM
Ano
2010
Provas
Disciplina
Programação
Assuntos

Na linguagem C++, considere:

I. O endereço armazenado em um ponteiro deve ser do mesmo tipo que o ponteiro (ex. um ponteiro para um int não pode armazenar o endereço de um float).

II. Exceção à regra apontada em (I) é o ponteiro void.

III. Não é possível chamar uma função segundo seu endereço, ainda que por meio de um ponteiro que armazena o endereço de início dessa função.

Está correto o que se afirma em

Alternativas
Comentários
  • Questão confusa. Eu anularia, já que o julgamento da questão não pode ser objetivo, já que a alternativa (I) é incorreta, mas supõe-se que seja correta desde que a (II) funcione em conjunto com a mesma.
  • A I e II estão corretas. 
    Segue sobre ponteiros void (Tradução Chula)

    "Void Pointers (Ponteiros Vazios)

    Chamamos de ponteiros vazios qualquer ponteiro que não possua um tipo de dado específico, ou seja, se seu tipo de dado for void.

    Ponteiros vazios ou void pointers são ponteiros genéricos que podem apontar para qualquer outro tipo de dado... "

    http://www.tiexpert.net/programacao/c/null-pointer-void-pointer.php
  • 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.