Nuestros mejores programadores han agotado sus depósitos de café, por su búsqueda día y noche por la solución, hasta que Jimena halló el arreglo en Bitbucket y ahora la compartimos con nosotros.
Solución:
Usar el especificador de formato %p
:
printf("variable A is at address: %pn", (void*)&A);
El estándar requiere que el argumento sea del tipo void*
por %p
especificador Ya que, printf
es una función variádica, no hay conversión implícita a void *
de T *
lo que sucedería implícitamente para cualquier función no variádica en C. Por lo tanto, se requiere la conversión. Para citar la norma:
7.21.6 Funciones de entrada/salida formateadas (borrador C11)
p El argumento será un puntero a void. El valor del puntero se convierte en una secuencia de caracteres de impresión, de una manera definida por la implementación.
Mientras que estás usando %x
que espera unsigned int
mientras &A
es de tipo int *
. Puede leer sobre los especificadores de formato para printf en el manual. La falta de coincidencia del especificador de formato en printf conduce a comportamiento indefinido.