关于指针数组输出时如何显示分别显示 地址,元素,

const char* test[5] =
{
"帅气的小伙.",
"漂亮的美女.",
"优秀的小伙.",
"怎么说呢...",
"优秀的小牛."
};
for (int i = 0; i < 5; i++)
{
cout << test[i] << endl;
cout << **(test[i]) << endl; //这里的解除引用符号只有一个 不知道为什么一个不显示,两个就多一个
}
test是一个指针数组
1.但为什么第一个输出会输出 元素内容而不是输出地址 **
2.第二个可以运行 证明 tset[i]是指针 (就让我很疑惑为什这么明明是指针但第一个为什么输出的不是地址)
3.第二个为什么解除引用后 会输出 空 白啊
求大佬抱

/* 这么写能理解了么 ?
你声明的是个指针数组
第一个打印,例如:i= 0 打印的是 test 的第 0 号元素的内容 
第二个吧  写法好像不对  语法有问题样   &*(test[i])   这么写才对吧,  &*(test[i]) == test[i]  
你再百度了 指针数组详细的看看吧
*/
const char* test[5]    == const char test[ 5 ][20]  

    const char test[ 5 ][20] =
    {
        "帅气的小伙.", // 0
        "漂亮的美女.",  // 1
        "优秀的小伙.",  // 2
        "怎么说呢...",  // 3
        "优秀的小牛."   // 4
    };

输出元素地址你试试&test[i],&是取地址的意思。

1、这个是因为cout << char * 就是会输出字符串内容而不是地址,这个函数就是这么定义的。
2、这个应该通不过编译的,不知道你的在哪个环境下可以运行,我用window64 + g++通不过。
3、如果要输出一个变量的地址可以用&,比如&test或者&test[i],&test会等于&test[0]。