Чтобы sizeof(string)
работал, не нужно ли где-нибудь в коде иметь переменную с именем string
?
Нет, * 1009Оператор * может использоваться для операнда типа, например sizeof(int)
.Цитируя спецификацию ( выделение шахты )
Оператор sizeof
возвращает размер (в байтах) своего операнда, который может быть выражением или именем в скобкахтипа .[....]
Вы можете увидеть использование типа string
в своем коде:
const string NOTES[] = {"C", "C#", "D", "D#", "E", "F",
"F#", "G", "G#", "A", "A#", "B"
};
Итак, NOTES
- это массив type string
, string
- здесь имя типа.
Выражение
for (int i = 0, n = sizeof(NOTES) / sizeof(string); i < n; i++)
- очень плохая попытка сосчитать членов вмассив, он мог бы быть переписан как
for (int i = 0, n = sizeof(NOTES) / sizeof(NOTES[0]); i < n; i++)
, который в основном делит размер всего массива на размер одного элемента, производя количество членов для удобства чтения.
Чтобы добавить точный источник, Проверьте заголовочный файл <cs50.h>
, string
определен как тип там.
Точное определение:
/**
* Our own data type for string variables.
*/
typedef char *string;