Я просто ожидал, что значения char будут напечатаны. Что происходит? - PullRequest
0 голосов
/ 24 мая 2019

ожидаемый результат был а б в г ш х у z

это что-то, связанное с порядком обработки cout, я имею в виду слева направо или справа налево.

#include <iostream>
using namespace std;
void dummy_func1() {
    char a = 'a';
    char b = 'b';
    char c = 'c';
    char d = 'd';
    cout<<&a<<" "<<&b<<" "<<&c<<" "<<&d<<endl;
}
char w = 'w';
char x = 'x';
char y = 'y';
char z = 'z';
void dummy_func2() {
    cout<<&w<<" "<<&x<<" "<<&y<<" "<<&z<<endl;
}
int main()
{
    dummy_func1();
    dummy_func2();
}

abcd bcd cd d

w xw yxw zyxw

1 Ответ

1 голос
/ 24 мая 2019

Вы должны опустить & при передаче значений символа в cout.

Вы фактически передаете char*, а cout интерпретирует это как строку с нулевым символом в конце.

Тот факт, что ваша программа не вызывает сбой, объясняется просто тем, как память выделяется во время выполнения Си.

Порядок значений в куче и стековой памяти, как вы можете видеть, меняется на противоположный, но это совершенно случайно и представляет интерес, только если вы хотите покопаться во внутреннем пространстве C / C ++.:)

...