Estoy trabajando en el siguiente tarea problema de C para los Científicos e Ingenieros:

Given the following declarations and assignments, what do these expressions evaluate to?

int a1[10] = {9,8,7,6,5,4,3,2,1}
int *p1, *p2;
p1 = a1+3;
Line 14: p2 = *a1[2];

Estoy tratando de compilar este código con gcc, pero cuando lo hago, me da el siguiente error:

w03_3_prob15.c: In function 'main':
w03_3_prob15.c:14:7: error: invalid type argument of unary '*' (have 'int')

Estoy usando el siguiente comando para compilar:

gcc -o w03_3_prob15 w03_3_prob15.c -std=c99

Realmente no estoy seguro de qué hacer. ¿Tiene usted alguna idea sobre cómo corregir este error?

  • No está destinado a compilarlo a hacer los deberes. Usted debe ser capaz de mirar y saber la respuesta. Pero el código que has puesto está roto. Volver al libro y compruebe que ha escrito correctamente.
  • Acabo de comprobar que escribí el código de manera precisa, desde el libro, y lo hice. Tenga en cuenta que ‘la Línea 14:» fue añadido para mostrar donde está el error.
InformationsquelleAutor Nathan Jones | 2011-10-18

3 Comentarios

  1. 7

    La línea no compila porque es incorrecta en el libro. Desde el autor de la página de Erratas:

    Page 438, line 17 from the bottom.
    p2 = *a1[2]; 
    should be  p2 = &a1[2];
    • Que fija! Gracias por decírmelo esa página para mí. Que será útil en el futuro.
  2. 2
    p2 = *a1[2];

    En C, unarios * sólo está definida para los punteros. p2 es un int*. a1 es un int[]. a1[2] es un int. [] tiene mayor prioridad que unario *, por lo que tiene *(a1[2]), que no es una expresión jurídica. Esta es la razón por la que el compilador es vacilante.

    Puedo pensar en dos posibles soluciones para este. El que usted quiera, depende de lo que usted está tratando de hacer.

    *p2 = a1[2]; //Assigns the value of the second int in the array to the location
                 //pointed to by p2.
    p2 = &a1[2]; //Assigns the location of the second int in the array to p2.
  3. 1

    El tipo de p2 es int*. El tipo de a1[2] es int, así *a1[2] no tiene sentido. Está usted seguro de que copian la tarea problema exactamente? (Si es así, mal deberes problema. De que sucedan.)

Dejar respuesta

Please enter your comment!
Please enter your name here