Как передать размер массива в функцию?

Рейтинг: 1Ответов: 2Опубликовано: 13.04.2011

Нужно передать в функцию массив и внутри функции определить размер массива. Я пробую сделать так:

#include <stdio.h>

void pass(int buf[256]) {
    printf("size is %d\n", sizeof(buf));
}

void main() {
    int buf[256];

    pass(buf);
}

и получаю при печати

size is 4

Как передать размер массива правильно и почему так, как я делаю, он не передается?

Ответы

▲ 6Принят

А как вы себе представляете это работает? Функция на самом деле на вход получает адрес массива чисел.. один адрес и больше ничего. Для того чтобы передать размер массива вы должны его.. передать в буквальном смысле. Например, так

void pass(int * buff, int buffer_size) {
    printf("size is %d\n", buffer_size);
}
▲ 3

В C++ можно сделать вот так:

template<size_t size>
void pass(int (&buf)[size])
{
    printf("size is %d\n", size);
}