Итак, мой инструктор на C++ сказал нам в классе, что не существует функции для определения размера массива на C++, и я не был этому доволен. Я нашел здесь вопрос о stackoverflow, который дал этот бит кода (sizeof(array)/sizeof(*array))
, и, хотя я не совсем понимаю его, я понимаю, что он берет общий объем памяти, выделенной для массива, и делит его на то, что я предполагаю, это распределение памяти по умолчанию его тип данных ... (???) Я решил заняться написанием функций (я в CS 111 - Основы 1) и написать функцию, которая вернула количество элементов в любом массиве, через который я его передал. Это то, что я написал:При передаче массива функции в C++, почему sizeof() не будет работать так же, как в основной функции?
#include <iostream>
using namespace std;
int length_of_array(int some_list[])
{
// This only returns the integer 1 for some reason
return (sizeof(some_list)/sizeof(*some_list));
}
int main()
{
// Declare and initialize an array with 15 elements
int num_list[] = {2,4,6,8,10,12,14,16,18,20,22,24,26,28,30};
//Outputs what I assume is the total size in bytes of the array
cout << sizeof(num_list) << endl;
//Outputs what I assume to be size of memory set aside for each in element in an array
cout << sizeof(*num_list) << endl;
//This extrapolates array's number of elements
cout << "This is the output from direct coding in the\nint main function:\n" <<
(sizeof(num_list)/sizeof(*num_list)) << endl;
//This function should return the value 15 but does not
int length = length_of_array(num_list);
cout << "This is the length of the array determined\n";
cout << "by the length_of_array function:\n" << length << endl;
return 0;
}
Функция возвращает 1 независимо от того, что я делаю. Кто-нибудь, пожалуйста, дайте мне конкретное обходное решение C++ и объяснение того, как оно работает? Спасибо.
функции C фактически не может принимать аргументы в виде массивов. Массивы вместо этого * распадаются * на указатели при передаче функций. См. Http://www.c-faq.com/aryptr/ – jamesdlin
Это не совсем дубликат этого вопроса. Это один о C, это о C++. И, как показывает здесь ответ, есть важное различие. Вы не можете использовать этот шаблонный трюк в C. Поэтому я голосую за повторное открытие. –
Итак, если у него есть совершенно другой ответ, как он дублируется - может ли принятый ответ применяться к вопросу, который вы говорите, я дублировал? – Sinux1