Что происходит в этом назначении char *?(оператор запятой со смешанными типами) - PullRequest
0 голосов
/ 06 июня 2018

Я работаю над кодом Си.В одном из файлов .c я вижу что-то вроде:

char* test = ("someChar", "someChar2", 3);

Когда я распечатываю эту переменную, на экране появляется «3».

Что происходит в этой частикод?Почему я получаю 3 в результате распечатки этого символа *?Мне больше всего интересно это ("someChar", "someChar2", 3) выражение.

РЕДАКТИРОВАТЬ (после того, как проблема будет решена):

То, что заставило меня почесать голову, было также тот факт, что есть два символаи один int в этом выражении.Если мы используем printf("%u", test), мы можем получить этот номер, но этот код определенно не выглядит чистым, и я считаю, что это не элегантный способ присвоения номера символу *.

1 Ответ

0 голосов
/ 06 июня 2018

Это из-за того, что comma оператор & страница руководства operator говорит , когда в выражении есть несколько запятых , затем решает из Left to Right, но считает правее большинства аргумент.

В операторе

char* test = ("someChar", "someChar2", 3);

test назначается самый правый аргумент, равный 3.И теперь это выглядит как

char *test = 3;

, поскольку test равно char pointer и должно инициализироваться действительным адресом , а 3 не является действительным адресом.Поэтому, если вы просто печатаете test, как printf("%d\n",test);, это не вызывает никаких ошибок, но вызывает неопределенное поведение .И если вы собираетесь разыменовать его, например, *test, то ваша программа будет аварийно завершена (ошибка Seg.), Это один из возможных сценариев, который вы должны учитывать при работе с указателями.

...