Unexpected results when printing array and char to screen with cout

后端 未结 2 1763
灰色年华
灰色年华 2021-01-17 02:09

As a beginner of learning C++, I am trying to understand the difference between an array of type char and an array of type int. Here is my code:

相关标签:
2条回答
  • 2021-01-17 02:39

    1.

    Because char arrays are treated differently to other arrays when you stream them to cout - the << operator is overloaded for const char*. This is for compatibility with C, so that null-terminated char arrays are treated as strings.

    See this question.

    2.

    This is due to integral promotion. When you call the binary + with a char (with value 'a') and an int (with value 1), the compiler promotes your char to either a signed int or an unsigned int. Which one is implementation specific - it depends on whether char is signed or unsigned by default, and which int can take the full range of char. So, the + operator is called with the values '97' and '1', and it returns the value '98'. To print that as a char, you need to first cast it:

    cout << "Print char array[0]+1: " << static_cast<char>(array[0]+1) << endl;
    

    See this question.

    0 讨论(0)
  • 2021-01-17 02:56

    Okay let's go over each separately.

    Print int array: 0xbfd66a88
    

    Here you print an int[] which goes into the operator << overload that takes int*. And when you print a pointer you see a memory address in hexadecimal format.

    Print int array[0]: 5
    

    Here you print the first element of the array which is an int. As expected.

    Print int array[0]+1: 6
    

    Here you add 1 to the first element of the array and print the result, which is still an int. 5+1 becomes 6. No mystery here.

    Print char array: abcd
    

    This is a bit trickier. You print a char[] and there is a special overload for operator << that takes a const char* and that one gets called. What this overload does is print each character beginning from the address where the pointer points until it finds a terminating zero.

    Print char array[0]: a
    

    Here you print a char so the overload that takes char gets called. It prints the corresponding ASCII character, which is 'a'.

    Print char array[0]+1: 98
    

    Here the result of operator+ is an int because the literal 1 is an int and the char value gets promoted to the wider type (int). The result is 98 because the ASCII code of the letter 'a' is 97. When you print this int you just see the number.

    0 讨论(0)
提交回复
热议问题