Как передать массив без второго элемента в c? - PullRequest
0 голосов
/ 23 января 2019

Как я могу перейти к функции моего массива без второго элемента массива?

например, в данном массиве a я хочу передать a[0],a[2],...,a[n-1] в функцию f.

Ответы [ 4 ]

0 голосов
/ 23 января 2019

Один из способов - вызвать функцию foo с

foo(a[0], a + 2)

, предполагая, что a имеет хотя бы 1 элемент.Лично я бы пропустил весь лот и проигнорировал второй элемент функции, особенно если foo разрешено изменять первый элемент, и в этом случае моя идея не сработает.Мое предложение также приведет к хаосу при индексации массива, и технически вы всегда можете достичь запрещенного элемента с помощью арифметики с указателями.

Из-за этой способности достигать элемента с помощью арифметики с указателями, способ избежать, то есть копироватьэлемент массива sans , вызовите функцию, а затем запишите все изменения исходного массива в вызывающей программе.

0 голосов
/ 23 января 2019

Вы можете поменять местами a[0] и a[1], а затем передать массив из второго элемента: (a + 1)

0 голосов
/ 23 января 2019

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

0 голосов
/ 23 января 2019

Если вы не можете изменить вызванную функцию, а также не можете изменить a:

  • Выделить память b для n - 1 элементов
  • Копировать элементa[0] в b[0]
  • Копирование из элемента a[2] в a[n-1] в b[1] в b[n-2] с использованием, например, memcpy.

Если вы можете изменить a, решение Axifive более эффективно.

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