【发布时间】:2017-09-10 23:35:17
【问题描述】:
第一个问题的 C++ 菜鸟。使用 Code:Blocks 16.01 GNU GCC 编译器。 提前致谢。代码;
#include <iostream>
using namespace std;
int main(){
char charArr[]="Hello";
cout<<charArr<<endl; //outputs Hello.
string strArr[]={"Hello", "Stack", "overflow"};
string *pStrArr=strArr; //pointer to strArr; same as &strArr[0].
cout<<*pStrArr<<endl; //Derreferencing pointer , outputs Hello
char charArr1[]="Hello";
char *pCharArr1=charArr1; /*pointer to charArr1.(charArr cout was Hello, not H, therefore i assumed we are storing in memory Hello);*/
cout<<*pCharArr1<<endl; /*dereferencing, outputs H, not Hello as i expected. */
return 0;
}
观察; charArr 输出 Hello,因此我假设创建指针并取消引用它应该输出 Hello;实际输出是 H,这似乎与在字符串 Array 上观察到的行为不一致,而第一个元素既被指向又被取消引用。
问题是: 显然我无法理解 char 数组。我希望以(尽可能)外行的方式对上述内容进行解释。
PS:确实使用了搜索功能并与鸭子交谈。谢谢你的时间。 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++ 在所有答案之后,我意识到实际问题应该是为什么第 2 行和第 4 行会产生不同的输出,strArr 是内存地址(表现为指针),而 charArr 输出数组内容。
string strArr[]= {"hello","world","how", "are","you"};
cout<<strArr<<endl;//outputs 0x28fedc.
char charArr[]="Hello";
cout<<charArr<<endl; // outputs hello
谢谢
【问题讨论】:
-
您似乎知道
char *pCharArr1=charArr1;使pCharArr1等于&charArr1[0]。因此,*pCharArr1等同于charArr1[0]- 单个字符。如果您打印cout << charArr1[0],您还会看到一个字符H。我不知道你为什么对这种行为感到惊讶。 -
不要使用原始数组! “PS:确实使用了搜索功能并与鸭子交谈。感谢您的时间。”进一步与您的鸭子交谈!
-
你需要一个good c++ book
-
这是错误的鸭子:youtube.com/watch?v=32VLnTKz0CI。如果你能听懂他在说什么,请忽略它。
标签: c++ arrays string pointers implicit-conversion