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;