void* 和 char* 的区别
Difference between void* and char*
char srch(char x[],char k){
int i=0;
while(x[i]!='[=10=]')
{
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 函数:-
char srch(char x[],char k){
int i=0;
while(x[i]!='[=11=]')
{
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* 时会发生这种情况?
字符指针 (char*
) 具有重载输出运算符 (operator<<
),并打印底层 C 风格字符串而不是指针地址。存在此重载是为了支持这样的代码:
std::cout << "some string";
"some string"
类型实际上是 const char*
,如果没有重载,它将打印字符串地址而不是字符串本身。
Void 指针 (void*
) 或任何其他指针类型 (AFAIK) 不提供这种重载,因此打印的值是指针地址。
char srch(char x[],char k){
int i=0;
while(x[i]!='[=10=]')
{
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 函数:-
char srch(char x[],char k){
int i=0;
while(x[i]!='[=11=]')
{
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* 时会发生这种情况?
字符指针 (char*
) 具有重载输出运算符 (operator<<
),并打印底层 C 风格字符串而不是指针地址。存在此重载是为了支持这样的代码:
std::cout << "some string";
"some string"
类型实际上是 const char*
,如果没有重载,它将打印字符串地址而不是字符串本身。
Void 指针 (void*
) 或任何其他指针类型 (AFAIK) 不提供这种重载,因此打印的值是指针地址。