输出char*指针得到的只是它指向的内容
void getAddr()
{
char a[8] = {'1','2','3','4','5','6','7','8'};
char *cp = a;
cout<<a<<endl;
cout<<&a[0]<<endl;
cout<<&(*cp)<<endl;
//下面两句输出[separator]的应该不是a和cp的地址吧?
cout<<&cp<<endl;
cout<<&a<<endl;
}
compiler: C++
result:
12345678x "
12345678x "
12345678x "
0x22ff4c
0x22ff50
=================================================
cp里面存的就是a[8]的地址,
a也是a[8]的地址,
用:&a[0]也没有错;
而cp本来就是一个指针,它指向一个变量的地址,&cp就是取的cp这个指针变量的地址了;
a就是字符数组的地址,&a就是字符数组地址的地址;
==================================================
==================================================
===================================================
需要采用cout<<(void*)cp<<才能得到cp的地址
====================================================
只要在打印的时候把cp的类型强制转换为非char*类型就行了,并不是一定要void*的,例如:
都可以。只有在char*类型下才会打印cp指向的字符串内容。
&a不是字符数组地址的地址,&a的意义是对数组a这个对象取地址,类型是int(*)[8],a这个标识符本身不是个变量,更不是对象,是没有地址的。
void getAddr()
{
char a[8] = {'1','2','3','4','5','6','7','8'};
char *cp = a;
cout<<a<<endl;
cout<<&a[0]<<endl;
cout<<&(*cp)<<endl;
//下面两句输出[separator]的应该不是a和cp的地址吧?
cout<<&cp<<endl;
cout<<&a<<endl;
}
compiler: C++
result:
12345678x "
12345678x "
12345678x "
0x22ff4c
0x22ff50
=================================================
cp里面存的就是a[8]的地址,
a也是a[8]的地址,
用:&a[0]也没有错;
而cp本来就是一个指针,它指向一个变量的地址,&cp就是取的cp这个指针变量的地址了;
a就是字符数组的地址,&a就是字符数组地址的地址;
==================================================
cout << (void *)cp;
==================================================
cout < <&cp < <endl; cp这个变量的地址
cout < <&a < <endl; a数组这个对象的地址
cout < <&a < <endl; a数组这个对象的地址
===================================================
需要采用cout<<(void*)cp<<才能得到cp的地址
char a[8] = "Hello";
char *cp = a;
cout<<a<<endl;
cout<<&a[0]<<endl; //和上句一样
cout<<(void*)cp<<endl; //char*比较特殊,需要这样才能输出
cout<<*cp<<endl;
cout<<&a<<endl; //这个就是数组a的实际地址了 = (void*)cp同
cout<<&cp<<endl; //这个应该是地址的地址,因为cp本身已经是一个指针
result:
Hello
Hello
0x22ff50
H
0x22ff50
0x22ff4c
char *cp = a;
cout<<a<<endl;
cout<<&a[0]<<endl; //和上句一样
cout<<(void*)cp<<endl; //char*比较特殊,需要这样才能输出
cout<<*cp<<endl;
cout<<&a<<endl; //这个就是数组a的实际地址了 = (void*)cp同
cout<<&cp<<endl; //这个应该是地址的地址,因为cp本身已经是一个指针
result:
Hello
Hello
0x22ff50
H
0x22ff50
0x22ff4c
====================================================
只要在打印的时候把cp的类型强制转换为非char*类型就行了,并不是一定要void*的,例如:
cout < <(int*)cp < <endl; 或cout < <(float*)cp < <endl;
都可以。只有在char*类型下才会打印cp指向的字符串内容。
&a不是字符数组地址的地址,&a的意义是对数组a这个对象取地址,类型是int(*)[8],a这个标识符本身不是个变量,更不是对象,是没有地址的。