Ya que no puedo agregar comentarios por el momento, aquí está mi granito de arena en una respuesta:
Si solo quieres saber si la memoria está en la pila o en el montón, lee las otras respuestas, están mucho más informadas que yo.
Si quieres saber exactamente donde los valores son, siempre se puede imprimir la dirección:
printf("address at a[0] = %p\n", (void *)&a[0]);
printf("address at p[0] = %p\n", (void *)&p[0]);
donde se dará cuenta de la misma respuesta. Pero, luego mira
printf("address at a[1] = %p\n", (void *)&a[1]);
printf("address at p[1] = %p\n", (void *)&p[1]);
Que es un pequeño ejercicio divertido. Sólo por diversión, ejecute el código siguiente y ver lo que se obtiene:
p[2] = 'a';
printf("a[0] is %d\n", a[0]);
printf("a[1] is %d\n", a[1]);
printf("p[2] is %d\n", p[2]);
putchar(p[2]);
Sugiero a encontrar los libros de texto de un principiante en C, ya que este tipo de pregunta es realmente lo que C se trata. –
Quizás me he perdido algo, pero ¿por qué necesitas saber si está almacenado en la pila o en el montón? ¿Has probado p [0]? Tal vez usted puede hacer una pregunta diciendo lo problema que tiene por lo que tenemos un punto de partida ... – Ray
Como dice @Ray, dependiendo de lo que está haciendo es muy posible que "no importa" ... y puede ser compilador Depende de varias maneras, definido por las operaciones que puede hacer en lugar de los detalles de la implementación. De cualquier manera, esas no son las únicas dos clases de almacenamiento ... bueno, al menos en C++ (apenas se dio cuenta de que esto era una pregunta C, sé poco sobre las formalizaciones de C ... alguien podría tener un vínculo más apropiado.) sin embargo, esto puede ser útil: http://www.gotw.ca/gotw/009.htm – HostileFork