Подтвердить что ты не робот

Как получить длину массива в C? "sizeof" является одним из решений?

Возможный дубликат:
Размер массива на языке программирования C? Почему у C-Array есть неправильное значение sizeof(), когда оно передается функции?

Посмотрите приведенный ниже код и предположите, что в чем разница между ключевыми словами sizeof, когда я использовал это:

#include<stdio.h>
#include<conio.h>
void show(int ar[]);
void main()
{
    int arr[]={1,2,3,4,5};
    clrscr();
    printf("Length: %d\n",sizeof(arr));
    printf("Length: %d\n",sizeof(arr)/sizeof(int));
    show(arr);
    getch();
}
void show(int ar[])
{
   printf("Length: %d", sizeof(ar));
   printf("Length: %d", sizeof(ar)/sizeof(int));
}

Но вывод выглядит следующим образом:

Выход:

Длина: 10

Длина: 5

Длина: 2

Длина: 1

почему я так люблю; Если я хочу взять все данные из одного массива в другой массив, как я могу это сделать?

Предложите мне, если кто-нибудь знает.

4b9b3361

Ответ 1

Массивы распадаются на указатели в вызовах функций. Невозможно вычислить размер массива, который представлен только как указатель любым способом, включая использование sizeof.

Вы должны добавить явный аргумент:

void show(int *data, size_t count);

В вызове вы можете использовать sizeof для вычисления количества элементов для реальных массивов:

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

show(arr, sizeof arr / sizeof *arr);

Обратите внимание, что sizeof дает размер в единицах char, поэтому требуется разделение по существу sizeof (int), или вы получите слишком высокое значение.

Также обратите внимание, что в качестве точки интереса и чистоты это sizeof не является функцией. Скобки нужны только тогда, когда аргумент является именем типа, так как аргумент тогда является листинговым выражением (например, sizeof (int)). Вы часто можете уйти без обозначения фактических типов, сделав sizeof по данным.

Ответ 2

show() принимает адрес массива, который хранится в 2 байтах. Подумайте об этом как int * ar.

Ответ 3

Вот почему, когда записывается функция, которая принимает массив, объявляются два параметра. тот, который является указателем на массив, другой, который определяет размер массива.