Почему sizeof дает неверное количество байтов в C ++? - PullRequest
0 голосов
/ 22 января 2020

Я пытаюсь получить размер массива в C ++ для последующего использования. Почему это дает 16?

#include <iostream>

using namespace std;

int main()
{
    int a[4];
    cout << sizeof(a) << endl;

    return 0;
}

Разве это не должно дать 20? Потому что в этом массиве в основном 20 байтов от [0] до [4]? Размер элемента можно проверить, получив -

sizeof(a[0])

Теперь это 4. 16/4 = 4, что означает, что есть 4 блока по 4 байта, тогда как на самом деле должно быть 5. Почему это ?

PS Моя основная путаница возникла из-за получения sizeof (a [4]) - равного 4. Поскольку он выдавал вывод 4 - я думал, что это часть массива.

Ответы [ 4 ]

13 голосов
/ 22 января 2020

Если вы объявляете массив a[4], это означает, что он имеет 4 элементов.
Единственными допустимыми признаками являются a[0], a[1], a[2] и a[3].

Доступ к a[4] недействителен.
Я не знаю, почему вы думаете, a[4] будет содержать 5 элементов.

Этот массив имеет 4 элемента, и его размер равен :

4-elements * 4-bytes = 16 bytes.
2 голосов
/ 22 января 2020

При выполнении int a[4]; вы объявляете массив из 4 целых чисел. Следовательно, размер всего вектора в 4 раза больше размера одного int (а если int окажется 4 байта, то произведение будет 16 байтов).

C / C ++ (и многие другие языки) используйте индексацию с нуля. Это означает, что элементы массива, определенного выше, пронумерованы от 0 до 3.

2 голосов
/ 22 января 2020

Вывод не так. Когда вы объявляете массив int a[4], он имеет 4 блока данных a[0], a[1], a[2] и a[3].

1 голос
/ 22 января 2020
int a[4];

имеет четыре элемента: a[0], a[1], a[2] и a[3].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...