2017-09-24 3 views
0
char srch(char x[],char k){ 
int i=0; 
while(x[i]!='\0') 
{ 
    if(k==x[i]) 
    { 
     const char *h=&(x[i]); 
     const void *l = h; 
     cout<<"\n\nTHE CHARACTER "<<x[i]<<" FOUND AT ADDRESS "<<l<<"\n\n\n"; 
     exit(0); 
    } 
    i++; 
} 
return NULL; 
} 

int main(){ 
system("cls"); 
char str[20],ch; 
cout<<"ENTER THE STRING:-\n"; 
gets(str); 
cout<<"ENTER THE CHARACTER WHICH YOU WANT TO SEEK:-\n"; 
cin>>ch; 

srch(str,ch); 

if(NULL); 
cout<<"\n\nCHARACTER NOT FOUND ";} 

Maintenant, si ma chaîne est "tarun" et que mon caractère à rechercher est 'a', alors elle montre parfaitement l'adresse de 'a'. MAIS Si je remplace ma fonction srch par ceci: -Différence entre void * et char *

char srch(char x[],char k){ 
int i=0; 
while(x[i]!='\0') 
{ 
    if(k==x[i]) 
    { 
     const char *h=&(x[i]); 
     const char *l = h; 
     cout<<"\n\nTHE CHARACTER "<<x[i]<<" FOUND AT ADDRESS "<<l<<"\n\n\n"; 
     exit(0); 
    } 
    i++; 
} 
return NULL;} 

alors au lieu de l'adresse, il montre arun. Pourquoi cela est-il arrivé quand j'ai utilisé char * au lieu de void *?

Répondre

3

pointeur de caractères (char*) a surchargé l'opérateur de sortie (operator<<) et impressions sous-jacentes chaîne C style au lieu d'adresse d'un pointeur. Cette surcharge existe afin de soutenir le code comme ceci: Type

std::cout << "some string"; 

"some string" est en fait const char*, sans la surcharge, elle écrirait une adresse de chaîne au lieu de la chaîne elle-même.

pointeur Void (void*), ou tout autre type de pointeur (AFAIK) ne fournit pas ce type de surcharge, de sorte que la valeur imprimée est adresse de pointeur.