C++ 为什么打印字符串数组时只打印第一个字符?

C++ 为什么打印字符串数组时只打印第一个字符?,c++,c-strings,C++,C Strings,请解释两个程序输出的差异 cout*branch[i]打印位于branch[i]指向的地址的单个字符 branch[i]打印整个char*数组,从branch[i]指向的地址开始

请解释两个程序输出的差异


cout
*branch[i]
打印位于
branch[i]
指向的地址的单个
字符


branch[i]
打印整个
char*
数组,从
branch[i]
指向的地址开始

打印位于
branch[i]
指向的地址的单个
char


branch[i]
打印整个
char*
数组,该数组从
branch[i]
指向的地址开始

branch[i]
包含一个
char*
指针,该指针指向以null结尾的字符串的第一个
char

*分支[i]
正在使用
操作符*
取消对该指针的引用,以访问第一个
字符


运算符
分支[i]
包含一个
char*
指针,该指针指向以null结尾的字符串的第一个
char

*分支[i]
正在使用
操作符*
取消对该指针的引用,以访问第一个
字符


运算符使用赋值运算符声明
常量字符*
时,例如:

const char* some_string = "some text inside";
实际情况是,文本存储在特殊的只读内存中,并在其后面添加了空终止字符(
'\0'
。声明
const char*
s的数组时也会发生同样的情况。数组中的每一个
const char*
都指向内存中文本的第一个字符


为了了解接下来会发生什么,您需要了解在使用赋值运算符声明
const char*
时,std::cout是如何执行的,例如:

const char* some_string = "some text inside";
实际情况是,文本存储在特殊的只读内存中,并在其后面添加了空终止字符(
'\0'
。声明
const char*
s的数组时也会发生同样的情况。数组中的每一个
const char*
都指向内存中文本的第一个字符

为了理解接下来会发生什么,您需要了解这是如何导致的

下标运算符
[]
的优先级高于间接运算符
*

因此
branch[i]
返回
const char*
,而
*branch[i]
返回
const char
这是因为

下标运算符
[]
的优先级高于间接运算符
*


因此
branch[i]
返回
const char*
*branch[i]
返回
const char

这不是一个家庭作业问题陈述。这是一个疑问,我在阅读ppt幻灯片时遇到了
*分支[I]
分支[I][0]
相同。这不是一个家庭作业问题陈述。这是一个疑问,我在阅读ppt幻灯片时遇到了
*分支[I]
分支[I][0]
相同。好的。但是为什么分支[i]只打印第一个字符呢。如果*branch[i]打印字符,分支[i]不应该打印地址吗?因为分支[i]是
char
的地址。但是为什么分支[i]只打印第一个字符呢。如果*branch[i]打印字符,分支[i]不应该打印地址吗?因为分支[i]是
char
的地址。
#include <iostream>

using namespace std;

int main()
{
    const char *branch[4] = { "Architecture", "Electrical", "Computer", "Civil" };

    for (int i=0; i < 4; i++) 
        cout << branch[i] << endl;

    system("pause");
    return 0;
}
#include <iostream>

using namespace std;

int main()
{
    const char *branch[4] = { "Architecture", "Electrical", "Computer", "Civil" };

    for (int i=0; i < 4; i++) 
        cout << *branch[i] << endl;

    system("pause");
    return 0;
}
const char* some_string = "some text inside";
const char* s = "text";
std::cout << s;