Проблема в том, что &forks
имеет тип
sem_t (*)[5]
То есть указатель на массив из пяти sem_t
с. Предупреждение компилятора вызвано тем, что sd.forks
имеет тип sem_t*
, а два типа указателей не могут быть преобразованы друг в друга.
Чтобы это исправить, просто измените назначение на
sd.forks = forks;
Из-за взаимозаменяемости C / указателя массива этот код будет работать как задумано. Это потому, что forks
будет рассматриваться как &forks[0]
, который имеет тип sem_t *
.