Aujourd'hui, j'ai lu dans « C Traps and Pitfalls » à propos""et''la description,''Un caractère entre guillemets simples représente un entier, et la valeur entière correspond à la valeur de séquence de ce caractère dans le jeu de caractères utilisé par le compilateur.

""Une chaîne entre guillemets doubles représente un pointeur vers le caractère initial d'un tableau sans nom. Ces deux symboles m'ont intéressé, j'ai donc ouvert VS2010 pour visualiser les formes de stockage en mémoire des caractères entre guillemets simples et doubles.

La méthode expérimentale est très simple : examiner séparément"yes"/'yes'/'ye'/'y'les formes de stockage en mémoire de quatre types de caractères, le code est le suivant :
int _tmain(int argc, _TCHAR* argv[])
{
    char test1[] = "yes";
    int test2 = 'yes';
    printf("%x\n", &test2);
    int test3 = 'ye';
    printf("%x\n", &test3);
    int test4 = 'y';
    printf("%x\n", &test4);
    return 0;
}

Les résultats expérimentaux sont les suivants :

D'après les formes de stockage en mémoire, il a été constaté que''Le caractère entre guillemets simples, sous forme de stockage d'un entier, traite le premier caractère comme l'octet de poids fort et le dernier caractère comme l'octet de poids faible, et les stocke dans cet ordre dans l'espace de stockage de 4 octets d'une variable int ;

""La chaîne entre guillemets doubles stocke le premier caractère à l'adresse de début et le dernier caractère à l'adresse de fin.

Les résultats expérimentaux ont confirmé la description dans « C Traps and Pitfalls ». Alors, lorsque''le caractère entre guillemets simples dépasse44 octets, que se passerait-il ? Une autre expérience a été menée, et le code est le suivant :

int _tmain(int argc, _TCHAR* argv[])
{
    char test1[] = "yes";
    int test2 = 'yes';
    printf("%x\n", &test2);
    int test3 = 'ye';
    printf("%x\n", &test3);
    int test4 = 'y';
    printf("%x\n", &test4);
    int test5 = 'yesa';
    printf("%x\n", &test5);
    return 0;
}

Les résultats expérimentaux sont les suivants :

D'après les résultats expérimentaux, on peut voir que lorsque le caractère dépasse 4 bytes, il dépasse la capacité de stockage du type int, et le compilateur signale une erreur, indiquant que la constante a trop de caractères. Cela peut effectivement rappeler aux amis programmeurs qu'il peut y avoir des erreurs de saisie de symboles. Cependant, lorsqu'il ne dépasse pas la capacité de stockage du type int, il est accepté tel quel sans aucun avertissement, ce qui présente un danger caché de mauvaise utilisation des symboles, et le débogage sera assez problématique si des problèmes surviennent plus tard dans le programme.

URL d'origine : https://blog.csdn.net/u013541620/article/details/43172891