Un problema de lenguaje C #include main() { char a[]="369",*p=a int s=0,t=1; 10; p--;
main()
{ char a[]="369",*p=a;
int s=0 ,t=1;
while(*++p) t*=10; //aquí while(*++p) es la forma abreviada. Es equivalente a while(*++p!=0), que es equivalente a
while(*++p!='\0'). Debido a que "*" y "++" tienen la misma prioridad y se pueden combinar libremente hacia la izquierda,
p se incrementa en 1 antes de apuntar a la matriz a, por lo que al comienzo de esta declaración, p apunta a un [1], que es 6.
Entonces, cuando finaliza el ciclo while, t=100, no 1000, p apunta a a[3], es decir, '\0'//p>
p- - -; //p- Hacer a[0].-; //p-- Hacer que p apunte a una matriz de a[2]=9 //
while(t) // while( t) También es una forma abreviada, equivalente a while(t!=0)//
{ s+=(*p-'0')*t // Presta atención a la explicación de esto; frase, tu confusión Aquí mismo. Déjame explicarte //
En primer lugar, debes entender que la suma y resta de datos de caracteres es esencialmente la suma y resta de los valores ASCLL correspondientes a los caracteres en el código ASCLL. table.
, en lugar de simplemente tomar caracteres directamente para sumar y restar. s+=(*p-'0')*t;
El comienzo de esta oración es que p apunta a a[2], y el espacio de almacenamiento de a[2] es el carácter '9' , que son los caracteres de almacenamiento en la tabla de códigos ASCLL. El valor ASCLL correspondiente al carácter '0' es 57.
El valor ASCLL correspondiente al carácter '0' es 48.
Por lo tanto, s+=(*p-'0')* t=s+ (*p-'0')*t=(57-48)*1000=900.
El resultado de restar el número de cualquier dato de carácter del carácter '0' es el número mismo. El resultado es el número mismo.
En otras palabras, los caracteres "9"-"0" son iguales al tipo de entrada 9. Es decir, los personajes a convertir. (Entiéndalo usted mismo)
p--;
t/=10;
}
printf("%d\n " ,s); // Entonces la salida s es, por supuesto, 963 //
}
}
La corrección es que el valor de t es 100 , no 1000, piso La respuesta anterior es incorrecta
La respuesta anterior es incorrecta.