Рубрики

Как найти размер массива в C / C ++ без использования sizeof?

Мы можем найти размер массива с помощью оператора sizeof, как показано ниже.

// Finds size of arr[] and stores in 'size'
int size = sizeof(arr)/sizeof(arr[0]);

Можем ли мы сделать то же самое без использования оператора sizeof?

Метод 1 (Написание нашего собственного sizeof)

Для данного массива (вы не знаете тип элементов в массиве) найти общее количество элементов в массиве без использования оператора sizeof?

Одно из решений — написать собственный оператор sizeof (подробности см. В этом разделе).

// C ++ программа, чтобы найти размер массива, написав наш
// размер
#include <bits/stdc++.h>

using namespace std;

  
// Пользовательский размер макроса
# define my_sizeof(type) ((char *)(&type+1)-(char*)(&type))

  

int main()

{

    int  arr[] = {1, 2, 3, 4, 5, 6};

    int size = my_sizeof(arr)/my_sizeof(arr[0]);

  

    cout << "Number of elements in arr[] is " 

         << size;

  

    return 0;

}

Выход :

Number of elements in arr[] is 6

Способ 2 (с помощью взлома указателя)

Следующее решение является очень коротким по сравнению с вышеупомянутым решением. Количество элементов в массиве A можно узнать с помощью выражения

int size = *(&arr + 1) - arr;

// Программа на C ++ для определения размера массива с помощью
// указатель взломать.
#include <bits/stdc++.h>

using namespace std;

  

int main()

{

    int  arr[] = {1, 2, 3, 4, 5, 6};

    int size = *(&arr + 1) - arr;

    cout << "Number of elements in arr[] is "

         << size;

    return 0;

}

Выход :

Number of elements in arr[] is 6

Как это работает?
Здесь арифметика указателей делает свое дело. Нам не нужно явно преобразовывать каждое из мест в указатели символов.

&arr ==> Pointer to an array of 6 elements.
         [See this for difference between &arr
          and arr]   

(&arr + 1) ==> Address of 6 integers ahead as
               pointer type is pointer to array
               of 6 integers.

*(&arr + 1) ==> Same address as (&arr + 1), but 
                type of pointer is "int *".

*(&arr + 1) - arr ==> Since *(&arr + 1) points 
                   to the address 6 integers
                   ahead of arr, the difference
                   between two is 6.          

Эта статья предоставлена Нихилом Чакравартулой из Инженерного колледжа JNTUH, Хайдарабад. Если вам нравится GeeksforGeeks и вы хотите внести свой вклад, вы также можете написать статью и отправить ее по почте на contrib@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой теме

Рекомендуемые посты:

Как найти размер массива в C / C ++ без использования sizeof?

0.00 (0%) 0 votes