що означає розмір масиву і розмір його покажчика?

Нещодавно я читав код удару і це робить плутанину

 static string const dirs[6] = {"-n", "-ne", "-se", "-s", "-sw", "-nw" };
 int a = sizeof(dirs)/sizeof(*dirs);

А a дорівнює розміру масиву, що дорівнює 6.

Тому моє запитання:

  1. що представляє sizeof (dirs)? Чи є розмір загального масиву?

  2. що представляє sizeof (* dirs)?

2
Принаймні другий, масиви .
додано Автор chris, джерело
Якщо ви наполягаєте на обробці масивів у c ++, то кращим способом цього є щось подібне: template size_t arraylen (T (&) [N]) {return N; }
додано Автор Jerry Coffin, джерело
Якщо ви наполягаєте на обробці масивів у c ++, то кращим способом цього є щось подібне: template size_t arraylen (T (&) [N]) {return N; }
додано Автор Jerry Coffin, джерело
@JerryCoffin: до цього додайте constexpr : P
додано Автор Mooing Duck, джерело
Що говорить ваша улюблена книга C ++ про те, що таке sizeof і що sizeof ?
додано Автор AnT, джерело
Що говорить ваша улюблена книга C ++ про те, що таке sizeof і що sizeof ?
додано Автор AnT, джерело
Мій улюблений вираз зловживання дня - це "розмір його покажчика". Навіть не близько до того, що це дійсно означає. (Yay, ви мали б увімкнути Google, для чого ви отримаєте хороший маленький -1 від мене.)
додано Автор user529758, джерело
Мій улюблений вираз зловживання дня - це "розмір його покажчика". Навіть не близько до того, що це дійсно означає. (Yay, ви мали б увімкнути Google, для чого ви отримаєте хороший маленький -1 від мене.)
додано Автор user529758, джерело

9 Відповіді

what does sizeof(dirs) represent? Is the size of the total array?

Так.

what does sizeof(*dirs) represent?

*dirs is same with dirs[0], so sizeof(*dirs) is the size of the first element. (well ,the size of every element because they are the same)

sizeof(dirs)/sizeof(*dirs) will be the number of elements in the array.

2
додано
what does sizeof(dirs) represent? Is the size of the total array?

Так.

what does sizeof(*dirs) represent?

*dirs is same with dirs[0], so sizeof(*dirs) is the size of the first element. (well ,the size of every element because they are the same)

sizeof(dirs)/sizeof(*dirs) will be the number of elements in the array.

2
додано
  1. sizeof(dirs) represents the size of the entire array
  2. sizeof(*dirs) represents the size of a single element of the array

Таким чином, sizeof (* dirs) * кількість елементів = sizeof (dirs), тому що кількість елементів * розмір кожного елемента = розмір всього масиву

Таким чином, кількість елементів = sizeof (dirs)/sizeof (* dirs).

2
додано
" sizeof (* dirs) представляє розмір одного елемента масиву" - точніше, першого.
додано Автор user529758, джерело
  1. sizeof(dirs) represents the size of the entire array
  2. sizeof(*dirs) represents the size of a single element of the array

Таким чином, sizeof (* dirs) * кількість елементів = sizeof (dirs), тому що кількість елементів * розмір кожного елемента = розмір всього масиву

Таким чином, кількість елементів = sizeof (dirs)/sizeof (* dirs).

2
додано
" sizeof (* dirs) представляє розмір одного елемента масиву" - точніше, першого.
додано Автор user529758, джерело

Коли оператор sizeof застосовується до посилання, результат такий же, як якщо sizeof було застосовано до самого об'єкта.

Якщо нерозмірний масив є останнім елементом структури, оператор sizeof повертає розмір структури без масиву.

Оператор sizeof часто використовується для обчислення кількості елементів у масиві, використовуючи вираз форми:

sizeof array/sizeof array[0]
0
додано

Коли оператор sizeof застосовується до посилання, результат такий же, як якщо sizeof було застосовано до самого об'єкта.

Якщо нерозмірний масив є останнім елементом структури, оператор sizeof повертає розмір структури без масиву.

Оператор sizeof часто використовується для обчислення кількості елементів у масиві, використовуючи вираз форми:

sizeof array/sizeof array[0]
0
додано

sizeof operator yields the size in bytes of the provided operand. Since *dir is equal to dir[0] the sizeof(*dirs) will return the size of the first array element in bytes wile sizeof(dirs) will return the size in bytes of all array. Hence when you divide those numbers you get the number of elements in array.

More on sizeof operator: http://en.wikipedia.org/wiki/Sizeof http://en.cppreference.com/w/cpp/language/sizeof and http://msdn.microsoft.com/en-us/library/4s7x1k91(v=vs.110).aspx

0
додано

Одним з важливих винятків з вищенаведених відповідей є те, що якщо dirs передається функції, sizeof (* dirs) все одно буде розміром одного елемента в масиві, але sizeof dirs тепер оцінюватиметься до розміру типу покажчика у вашому середовищі. Це відбувається тому, що масив, що передається у функцію, є просто покажчиком при використанні всередині функції.

0
додано

Одним з важливих винятків з вищенаведених відповідей є те, що якщо dirs передається функції, sizeof (* dirs) все одно буде розміром одного елемента в масиві, але sizeof dirs тепер оцінюватиметься до розміру типу покажчика у вашому середовищі. Це відбувається тому, що масив, що передається у функцію, є просто покажчиком при використанні всередині функції.

0
додано
IT KPI C/С++ новым годом
IT KPI C/С++ новым годом
747 учасників

Чат обсуждения С/С++. - Вопросы "напишите за меня лабу" - это оффтоп. - Оффтоп, флуд, оскорбления и вбросы здесь не приняты. - За нарушение - предупреждение или mute на неделю. - За спам и рекламу - ban. Все чаты IT KPI: https://t.me/itkpi/1147