Как я могу инициализировать указатель на символ, чтобы показать указатель массива в C? - PullRequest
0 голосов

У меня есть массив * s, и я хочу, чтобы ** ptr показывался тем же адресам, что и s. Вот мой код: enter code here #include #include

int main (int argc, char **argv) {
    char *s = "12d3.46";
    char **ptr = s;
    printf("%p %p\n", s, ptr);
}

Компилятор отправляет это предупреждение: help. c: В функции 'main': help. c: 6: 18: warning : инициализация из несовместимого типа указателя [-Wincompatible-pointer-types] char ** ptr = s;

Хотя при выполнении моей программы адреса указателей совпадают. Кто-нибудь может мне помочь? Спасибо в Advane!

1 Ответ

0 голосов
/ 27 марта 2020

Переменная s объявлена ​​как имеющая тип char *. В то время как переменная ptr объявлена ​​имеющей тип char **. Таким образом, указатели имеют несовместимые типы.

Чтобы код был действительным, вы должны написать либо

char *s = "12d3.46";
char *ptr = s;

, либо

char *s = "12d3.46";
char **ptr = &s;

В последнем случае значения указатели s и ptr будут разными. Указатель s содержит адрес первого символа строкового литерала "12d3.46", а указатель ptr содержит адрес самой переменной s. То есть значение, хранящееся в s, будет равно значению выражения *ptr.

Обратите внимание, что s не является массивом. Это указатель. Если вы хотите объявить массив, а затем указатель, который будет указывать на первый элемент массива, вы должны написать

char s[] = "12d3.46";
char *ptr = s;

В этом случае этот вызов

printf("%p %p\n", ( void * )s, ( void *)ptr);

выведет два равные адреса.

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