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;