Переглядаючи кілька запитань щодо співбесіди на C, я знайшов питання, в якому сказано "Як знайти розмір масиву в C, не використовуючи оператора sizeof?", Із наступним рішенням. Це працює, але я не можу зрозуміти, чому.
#include <stdio.h>
int main() {
int a[] = {100, 200, 300, 400, 500};
int size = 0;
size = *(&a + 1) - a;
printf("%d\n", size);
return 0;
}
Як і очікувалося, повертається 5.
редагувати: люди вказали на цю відповідь, але синтаксис трохи відрізняється, тобто метод індексації
size = (&arr)[1] - arr;
тому я вважаю, що обидва питання справедливі і мають дещо інший підхід до проблеми. Дякую всім за неосяжну допомогу та ретельне пояснення!
*((*(&array + 1)) - 1)
безпечно використовувати для отримання останнього елемента автоматичного масиву? . tl; dr *(&a + 1)
посилається на Undefined Behvaior
(ptr)[x]
це те саме, що *((ptr) + x)
.
&a + 1
не вказується жоден дійсний об'єкт, тому він недійсний.