#include <iostream>
using namespace std;
int main() {
char* a = (char *)"hello";
cout << a[0] << endl;
//取出a存储地址中的值,打印出“h”
cout << &a[0] << endl;
return 0;
}
打印结果:
关于类型:
a的类型是char**,由于运算符优先级的关系,会先运行a[0](char)类型,然后进行取址的操作 所以&a[0]的类型是char*
关于内存地址(64位系统,内存地址相邻4个字节):
<地址1> (a)[ 地址2 ]
<地址2> [ 前5个字节存储hello每个字符的ASCII码 ]
0x0000007780cff628 {0x00007ff66cf9ce04 "hello"}表示0x0000007780cff628是&a的值,0x00007ff66cf9ce04是0x0000007780cff628地址存储的值,把0x00007ff66cf9ce04地址所储存的值取出来是“hello”字符串
cout对于char*类型作了重载。
表面上看是把一个字符指针传给了cout,实际上cout会找到&a[1]指向的那块内存,把那里保存的字符依次输出,直到遇见字符串结束符'\0',所以当cout接收到&a[1]的时候,会定位到a[1]字符所在的地址,把后面剩下的字符一起打印出来。
参考链接: