params
- это int [2]
, который уменьшается до int *
при передаче в функцию, а функции, которые принимают int []
с в качестве параметров, действительно берут int *
с за кадром.К сожалению, ¶ms
- это int(*)[2]
, что ближе к int *
, чем int **
(так же, как int *[]
в параметре функции), который вам нужен.
Лучший вариант - изменитьВаша функция:
double strcmp95(char *ying, char *yang, long y_length, int *ind_c)
И предположим, что вызывающий абонент всегда передаст int[2]
.Или вы можете явно запросить int(*)[2]
- указатель на массив из 2 int
s:
double strcmp95(char *ying, char *yang, long y_length, int (*ind_c)[2])
Но это кажется ненужным, чтобы гарантировать, что два int
s пройдены, и если выНеобходимость учесть возможность более двух int
с в массиве не подходит.Лучший способ:
double strcmp95(char *ying, char *yang, long y_length, int *ind_c, size_t len)
size_t
- это целочисленный тип без знака, гарантированно способный хранить размер любого объекта или любого индекса массива, и в этом случае параметр len
является длинойвашего массива ((sizeof params / sizeof params[0])
, если вы хотите быть фантазийным / дальновидным, 2
, если вы этого не сделаете).Это самый безопасный маршрут.
Кстати, ваш параметр y_length
также должен быть переменной size_t
.long
подписано, и я бы не хотел обрабатывать строку длиной -1.Даже если вы используете unsigned long
, нет никакой гарантии, что long
будет достаточно для обработки размеров системы (или, наоборот, что слишком большое значение long
будет слишком большим для вашей системы, чтобы вызывать путаницу).