Étant donné que scanf a (const char *) dans le documentation from Microsoft et la réponse à this question que diable se passe-t-il quand je fais de même pour la promotion (char **) en (const char **)?Pourquoi cela permet-il la promotion de (char *) vers (const char *)?
Fondamentalement pourquoi cela compile-t-il?
#include <stdio.h>
int main(int argc, char **argv)
{
char szArray[50];
int i = 0;
strcpy(szArray,"10");
/* the following code is upcasting the (char *) to (const char *) */
sscanf(szArray,"%d",&i);
return 0;
}
Et pourquoi ne pas compiler?
#include <stdio.h>
void processargs(const char **p)
{
}
int main(int argc, char **argv)
{
processargs(argv);
return 0;
}
Les deux semblent faire la même chose à un pointeur!
vous ne comprenez pas une chose: si T -> U fonctionne, cela ne signifie pas que T * -> U * fonctionne. juste un simple: double a = 4;/* int -> double */int p; double * dp = & p;/* int * -> double * ?? */ –
Je ne change pas les types ici ... les deux ensembles sont des pointeurs. – ojblass
S'il vous plaît fermer l'autre et pas celui-ci ... – ojblass