Нужно получить указатель на переменную массива char.

  char hostName[] = "Server1";
  uint32_t *p;
  p = &hostName;

Моему пониманию, вероятно, не хватает всерьез, но я не могу понять это. Я получаю следующую ошибку на "p = & hostName;" линия.

invalid conversion from 'int*' to 'uint32_t* {aka long unsigned int*}' [-fpermissive]

Кто-нибудь может помочь, пожалуйста.

0
Misha 24 Окт 2019 в 03:57

2 ответа

Лучший ответ

char hostname[] = "Server1; объявляет hostName как массив char. Итак, &hostname является указателем на массив char.

uint32_t *p; определяет p как указатель на uint32_t.

Указатель на массив char и указатель на uint32_t - это разные вещи, и они несовместимы. C не позволяет назначать одно другому.

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

Чтобы получить указатель на массив, вы можете использовать char (*p)[]; p = &hostName; или char (*p)[8]; p = &hostName;.

Однако, скорее всего, вам действительно нужен указатель на первый символ в массиве, и в этом случае вы можете использовать:

char *p;
p = &hostName[0];

Кроме того, когда массив используется в выражении, но не как операнд sizeof или унарный &, он автоматически преобразуется в указатель на его первый элемент, поэтому вы также можете использовать:

char *p;
p = hostName;
4
Eric Postpischil 24 Окт 2019 в 01:17

Прежде всего, насколько вы понимаете, если мы напишем переменную с оператором & (амперсанд), она даст адрес (то есть номер). Когда вы печатаете адрес, он будет похож на беззнаковое целое число, поэтому вы пытаетесь объявить беззнаковый целочисленный указатель, а затем назначить им адрес.
uint32_t *p; p = &hostName; Но в этом нет смысла. Поскольку, к вашему сведению, указатели в основном хранят адреса переменных одного и того же типа. p = &hostName Это совершенно неверно. при этом присваивает последовательности символов целочисленному указателю без знака. Надеюсь, это поможет :)

0
VJAYSLN 24 Окт 2019 в 07:44