Объедините размер строки и характера - PullRequest
4 голосов
/ 19 февраля 2020

Последние 2 оператора cout имеют одинаковый размер. почему?

int main() 
{
char ch=127;
cout<<sizeof(ch)<<endl;    //Size=1
cout<<sizeof("Hello")<<endl;    //Size=6
cout<<sizeof("Hello"+ch)<<endl;    //Size=8
cout<<sizeof("HelloWorld"+ch)<<endl;    //Size=8
return 0;
}

Пожалуйста, объясните. Спасибо

1 Ответ

8 голосов
/ 19 февраля 2020

Когда вы делаете "Hello"+ch, массив, содержащий строку "Hello", распадается на указатель на его первый элемент, и вы добавляете ch к этому указателю.

Результатом арифметического указателя c является указатель, размер которого вы получите.


Эквивалентный код будет выглядеть примерно так:

char const hello[] = "Hello";
char const* phello = hello;  // equivalent to &hello[0]
char const* result = phello + ch;
cout << sizeof(result) << endl;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...