Странность при объявлении массива структур в C - PullRequest
0 голосов
/ 17 мая 2018

В основном у меня есть что-то подобное в моем коде

struct connComp {
  struct connComp *parent;
  struct connComp *neigh[noNN];
  int *pSpinValue, SpinValue, Flag;
  unsigned int size;
} comp[N];

и когда я пытаюсь использовать массив структур comp[N] в качестве ввода для функции типа void function(struct connComp), написав function(comp)в моем коде я получаю следующую ошибку от компилятора gcc:

несовместимый тип для аргумента 1 функции 'function' (comp)

ожидается "struct connComp", но аргумент имеетtype 'struct connComp *'

Так что похоже, что comp[N] был объявлен как указатель, и я действительно не могу понять, почему.Заранее большое спасибо за любую помощь!

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

Массив в C является указателем. В частности, к первому элементу массива.

Чтобы передать отдельный элемент в вашу функцию, вам нужно указать, какой это элемент. например,

function(comp[2]);

Если вы хотите работать со всем массивом в своей функции, вам нужно изменить функцию, чтобы она принимала массив вашей структуры или указатель на вашу структуру. например, * +1008 *

void function(struct connComp[N]); /* to receive an array of a static size */
void function(struct connComp*);   /* to receive an array of a variable size */
0 голосов
/ 17 мая 2018

Передача указателей и массивов в функцию и C эквивалентны. comp - это массив из N connComp структур. Когда вы передаете comp функции, у вас есть адрес начала массива, который ведет себя так же, как указатель. Чтобы использовать comp в функции, которая ожидает структуру, вы должны разыменовать указатель - попробуйте передать comp[0].

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