void *和char *

时间:2017-09-24 14:38:38

标签: c++ c++11 pointers void-pointers pointer-address

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

现在,如果我的字符串是&#34; tarun&#34;我要追求的性格是&#39; a&#39;然后它完美地显示了&#39; a&#39;的地址。 但 如果我用这个替换我的srch功能: -

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

然后代替地址,它显示arun。 当我使用char *而不是void *?

时,为什么会发生这种情况

1 个答案:

答案 0 :(得分:3)

字符指针(char*重载输出运算符(operator<<),并打印基础C样式字符串而不是指针的地址。存在此重载是为了支持这样的代码:

std::cout << "some string";

"some string"类型实际上是const char*,没有重载会打印字符串的地址而不是字符串本身。

无效指针(void*或任何其他指针类型(AFAIK)不提供此类过载,因此打印值为指针地址。