Arduino и указатели на массив символов - PullRequest
0 голосов
/ 24 октября 2019

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

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

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

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

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

Ответы [ 2 ]

4 голосов
/ 24 октября 2019

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;
0 голосов
/ 24 октября 2019

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

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