Можно ли создать функцию с массивом в качестве одного параметра и вторым параметром для хранения размера параметра 1 - массива? - PullRequest
1 голос
/ 10 ноября 2019

"Первый параметр - это массив целых чисел, а второй - целое число, число элементов в массиве. Функция не возвращает значение."

Функция не должна ничего возвращатьтак у меня есть возврат void. Я могу создать массив просто отлично, но я не уверен, смогу ли я создать целочисленный параметр, который напрямую влияет на размер массива первого параметра.

void printArray(int x[], int arrayCount);

Ответы [ 3 ]

1 голос
/ 10 ноября 2019

Это общий шаблон в C. Функция, которая принимает массив (или указатель) вместе с параметром "size".

В вашей реализации printArray вы фактически не создаетемассив, он уже передан вам:

И вы можете проверить свой код следующим образом

 void printArray(int x[], int arrayCount)
 {
      // your code goes here
 }


 int main(int argc, char** argv)
 {
      int testArray1[] = {8,6,7,5,3,0,9};
      int count1 = sizeof(testArray1) / sizeof(testArray1[0]);  // 7

      printArray(testArray1, count1);

      return 0;
 }
1 голос
/ 10 ноября 2019

Можно ли создать функцию с массивом в качестве одного параметра и вторым параметром для хранения размера параметра 1 - массива?

Да и нет.

Да, приведенный ниже код в порядке. Но нет, x - это , а не массив. Параметры функции не могут быть массивом в C - даже если int x[] выглядит как единица. В случае параметров функции int x[] совпадает с int *x. x - это указатель - указатель на int.

void printArray(int x[], int arrayCount);

Это не проблема при использовании. Рассмотрим ниже. Во многих случаях массив преобразуется в адрес первого элемента массива. Здесь fred преобразуется &fred[0] в качестве первого аргумента в printArray().

int fred[42];
printArray(fred, 42);

Пример реализации printArray() печатает размер параметра x. Обратите внимание, что это размер указателя .

void printArray(int x[], int arrayCount) {
  printf("Size of x %zu\n", sizeof x);
}
1 голос
/ 10 ноября 2019

Это действительный код

void printArray(int x[], int arrayCount);

, хотя второй тип будет лучше использовать с типом size_t для хранения количества элементов первого параметра (массива).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...