2017-09-24 95 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 ";} 

现在,如果我的字符串是“tarun”,并且我要查找的字符是'a',那么它完全显示'a'的地址。 但 如果我用这个代替我SRCH功能: -void *和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;} 

然后代替地址,它显示了阿伦。 为什么这发生在我用char *而不是void *?

回答

3

字符指针(char*已重载输出运算符(operator<<),和C风格串,而不是一个指针的ADRESS底层打印。此重载为了能支持这样的代码:

std::cout << "some string"; 

"some string"类型实际上是const char*,没有超载,将打印字符串的ADRESS不是字符串本身。

无效指针(void*或任何其他指针类型(AFAIK)不提供这种过载,所以打印的值是指针地址。

相关问题