为什么a,b的地址取不到

#include
using namespace std;
int main()
{
char ch1='I',ch2='Q';
int n1=1, n2=6;
double d1=1.25,d2=20.5;

char *a,*b;
a=&ch1;b=&ch2;

int *c,*d; 
c=&n1;d=&n2;

double *e,*f;
e=&d1;f=&d2;


  cout<<a<<"  "<<b<<endl;
cout<<c<<"  "<<d<<endl;
cout<<e<<"  "<<f<<endl;

图片说明

cout<<*a<<"  "<<*b<<endl;
cout<<*c<<"  "<<*d<<endl;
cout<<*e<<"  "<<*f<<endl;


*a+=32; *b+=32;
*c-=5;  *d-=5;
*e+=10.0;*f+=10.0;

cout<<*a<<" "<<*b<<endl;
cout<<*c<<" "<<*d<<endl;
cout<<*e<<" "<<*f<<endl;

return 0;

}

cout<<a 默认进行处理,输出a所指向的字符串。
写成这样,cout<<(void *)a 因为void型, cout没法输出,只能乖乖输出指针

 因为cout对char*重载了,会输出字符串而不是地址
用cout << (int)*a
看看

char *a
因为输出就是字符串,不是地址,需要输出字符串的地址 需要输出首地址

cout<< &a[0]

首先要明确a是一个字符指针变量,那么(void *)a就是求的这个指针的地址