请高手解答一个关于C++指针数组的问题

来源:百度知道 编辑:UC知道 时间:2024/09/24 10:33:02
char *str[] = {"China","Japan","English","America","Australia","Canada"};
str初始化后,str里面的每一个元素都应该是指向China、Japan……等字符数组的首地址吧?
那为什么
cout<<str[0]<<endl;
输出China,而不是输出的China字符数组的首地址?
cout<<*str[0]<<endl;
输出C却不是China? 按我的理解,输出C的话,应该是*(str[0]+0)吧?
是不是可以这样理解:
对于char *ptr,如果指向一个名为str的字符数组(即ptr=str),那么cout<<ptr就是输出str的所有内容?

你好:

(1)char *str[] = {"China","Japan","English","America","Australia","Canada"};

printf("%o",str[0]);输出地址
printf("%s,str[0]);输出值
我们可以看到输出什么取决于输出的格式,那么我们可不可以也认为在C++的中cout<<str[0]<<endl; 就是输出一个字符串,而这正是编译器的杰作呢

(2)cout<<*str[0]<<endl; 输出C我觉得是没有问题的,因为str里面的每一个元素都应该是指向每一个字符串中第一个字母的位置,所以
*str[0]就指向的是C而不会顾及到后面,因为我们知道字符串在存储的时候只是把第一个字母的首地址赋给了数组,当要输出字符串的时候,首先找到首字母的地址然后指针下移,直到遇到\0结束输出,而您cout<<*str[0]<<endl;显然只输出首字母

祝你好运

这取决于c++标准流对 ostream& operator << ( ostream& os, const char * )
的实现。当然,我这个只是打个比方罢了。
如果编译器通知程序你这个ptr是个字符串的话,它就会输出字符串。
而你说的str[0]和*str[0]不是有明显的区别吗?

str初始化后,str里面的每一个元素是指向China、Japan……等字符数组的首地址
可当你输出str[0]的时候 他是按指向的字母依次输出 直到下一个为止
当cout<<*str[0]<<endl;时,正如你说的 str[0]存放的是China字符数组的首地址,所以 str[0]指向C,输出* str[0]就是输出C。

*(str[0]+0)的答