Hoy leí en «C Trampas y Defectos» la descripción de""y''la descripción,''un carácter entre comillas simples representa un entero, cuyo valor corresponde al valor de secuencia de ese carácter en el conjunto de caracteres adoptado por el compilador.

""la cadena entre comillas dobles representa un puntero al carácter inicial de un array sin nombre. Me interesé por estos dos símbolos, así que abrí VS2010 para ver la forma de almacenamiento en memoria de los caracteres entre comillas simples y dobles.

El método del experimento es muy sencillo: observar por separado"yes"/'yes'/'ye'/'y'la forma de almacenamiento en memoria de los cuatro tipos de caracteres. El código es el siguiente:
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;
}

Los resultados del experimento son los siguientes:

Según la forma de almacenamiento en memoria, se descubre que''la cadena entre comillas dobles, de acuerdo con el formato de almacenamiento de un entero, reconoce el primer carácter como el byte más significativo y el último como el menos significativo, y los almacena en ese orden en el espacio de 4 bytes de la variable int;

""la variable entre comillas simples almacena el primer carácter en la dirección inicial y el último carácter en la dirección final.

El resultado del experimento confirma la descripción de «C Trampas y Defectos». Entonces, cuando''el carácter entre comillas simples supera4bytes. ¿Qué ocurre entonces? Realicemos otro experimento. El código es el siguiente:

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;
}

Los resultados del experimento son los siguientes:

Según los resultados del experimento, se puede ver que cuando el carácter supera los 4 bytes, se excede la capacidad de almacenamiento del tipo int y el compilador muestra un error indicando que hay demasiados caracteres constantes. Esto puede alertar eficazmente a los compañeros programadores de la posible existencia de un error de entrada de símbolos. Pero cuando no se supera la capacidad de almacenamiento del tipo int, se acepta todo sin ningún aviso, lo que conlleva un riesgo oculto de uso indebido de símbolos. En el futuro, si el programa presenta problemas, la depuración será bastante problemática.

Dirección original: https://blog.csdn.net/u013541620/article/details/43172891