Одним из недостатков, с которыми я могу думать, является int bar(int*)
, так это то, что это может затруднить перегрузку. Например:
int areaOfRectangle(int width, int height);
int areaOfRectangle(int x1, int y1, int x2, int y2);
все в порядке, но как вы собираетесь это делать с массивами?
int areaOfRectangle(int* widthHeight);
int areaOfRectangle(int* coordinates); // error
, приведенный выше, не будет собирать, потому что int areaOfRectangle(int*)
не может быть объявлена / определена дважды.
Кроме того, если вы просто используете массив как способ произвольной группировки параметров, вы делаете свой код труднее читать и использовать. Сравните:
int calculateIncome(int normalHours,
int overtimeHours,
int normalRate
int overtimeRate); // Self documenting
int calculateIncome(int* parameters); // How do I use this function?
int calculateMean(int* numbers); // Parameters are logically grouped,
// so array makes sense
Третий вопрос (который Санчо описывает в своем ответе) является то, что int bar(int*)
опасно. Что происходит, когда пользователь вызывает вашу функцию меньшим массивом, чем тот, который вы ожидали? С другой стороны, вызов int Foo(int, int)
с неправильным количеством параметров не будет скомпилирован.
У вас есть массив? Затем передайте его как массив. У вас есть отдельные значения? Передайте его как отдельные значения. –
Если вы хотите избежать создания массива просто для передачи двух аргументов функции, то да, первая предпочтительнее. –