字符数组输出 - C ++

时间:2017-10-09 06:21:15

标签: c++

道歉,如果我错过了另一个帖子,我查看了推荐内容,没有一个与我所遇到的完全一样。我试图用大写和小写字母显示字母表。在我承诺完整的事情之前,我想用几个测试:

int main()
{
    char *letters[79] = { "Aa ","Bb ","Cc ", "/0"} ;
    int pause;
    cout << "Letters are: " << letters << endl ;
    cout << "Continue (Y or N)" << endl ;
    cin >> pause;
    cout << endl;

    return 0;
}

当我尝试编译时,这就是结果:

console output of above code

我无法理解的是为什么我会在这些字母上获得看似十六进制的输出而不是字母本身。

2 个答案:

答案 0 :(得分:1)

您错过了提及数组索引letters[0]

试试这个:

char *letters[79] = { "Aa ","Bb ","Cc ", "/0"};
cout  << "Letters are: " << letters[0] << endl;

输出:

Letters are:  Aa  

或像这样循环:

char *letters[79] = { "Aa ","Bb ","Cc ", "/0"};
for(int i=0; i<sizeof(*letters); i++)
    cout  << "Letters are: " << letters[i] << endl;

输出:

Letters are:  Aa  

Letters are:  Bb  

Letters are:  Cc  

Letters are:  /0 

答案 1 :(得分:0)

您的控制台输出显示 字母 的地址,因为您告诉它打印指向内存地址的指针。你需要一个循环来迭代它。其余的是pointer arithmetic

另外,“Aa”不是char类型,而是“A”和“a”。所以,你也应该单独定义它们;否则,很可能会收到编译器警告。请注意,最后一个字符应为“\ 0”,而不是“/ 0”。如果你可以试试这个:

int main()
{
    char *letters[79] = { "A","a","B", "b", "C", "c", "\0"} ;
    int pause;
    cout << "Letters are: ";
    for(int i = 0; i < 79; i++){
        cout << letters[i];
    }
    cout << endl << "Continue (Y or N)" << endl ;
    cin >> pause;
    cout << endl;
    return 0;
}

然后,输出是:

Letters are: AaBbCc