Originariamente inviato da Freax
perché dovrebbe? perché per quanto ne so è un puntatore, o meglio la stringa "Ciao Mondo" è data in "gestione" ad un puntatore.
Ma infatti è un puntatore (come ho detto), quello che non capisco è perché tu creda che sia un puntatore doppio...

Credo che alla fine il modo più semplice per capire cosa siano gli string literals è vedere la definizione dello standard (C99, §6.4.5, ¶5), che in sintesi dice che gli string literal altro non sono che delle stringhe (array di char) globali, a cui ti viene dato un puntatore la cui modifica è proibita. Ossia, se tu scrivi:
codice:
#include <stdio.h>

int main()
{
    puts("Hello World!");
}
è come se scrivessi:
codice:
#include <stdio.h>

char VariabileNascosta[]={'H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd', '!', 0};

int main()
{
    puts(VariabileNascosta);
}
con la restrizione aggiuntiva che cercare di modificare VariabileNascosta risulta in undefined behavior.